我正在寫一個android的應用程序來記錄所有的傳感器數據,但經過可變時間段的應用程序不斷崩潰傳感器服務死亡日誌,然後智能手機似乎重置自己。 我logcat的是這樣的:如何減少GC_CONCURRENT操作?
I/sensorLis﹕ added MPL Accelerometer
I/sensorLis﹕ added MPL Gyroscope
I/sensorLis﹕ added Corrected Gyroscope Sensor
I/sensorLis﹕ added MPL Magnetic Field
I/sensorLis﹕ added MPL Gravity
I/sensorLis﹕ added Gravity Sensor
I/sensorLis﹕ added MPL Rotation Vector
I/sensorLis﹕ added Rotation Vector Sensor
D/dalvikvm﹕ GC_CONCURRENT freed 509K, 7% free 9687K/10375K, paused 6ms+4ms
D/dalvikvm﹕ GC_CONCURRENT freed 416K, 7% free 9674K/10375K, paused 9ms+1ms
D/dalvikvm﹕ GC_CONCURRENT freed 405K, 7% free 9676K/10375K, paused 13ms+4ms
D/dalvikvm﹕ GC_CONCURRENT freed 391K, 7% free 9676K/10375K, paused 4ms+1ms
D/dalvikvm﹕ GC_CONCURRENT freed 406K, 7% free 9677K/10375K, paused 5ms+3ms
D/dalvikvm﹕ GC_CONCURRENT freed 405K, 7% free 9678K/10375K, paused 6ms+6ms
D/dalvikvm﹕ GC_CONCURRENT freed 395K, 7% free 9681K/10375K, paused 1ms+2ms
D/dalvikvm﹕ GC_CONCURRENT freed 412K, 7% free 9680K/10375K, paused 9ms+3ms
D/dalvikvm﹕ GC_CONCURRENT freed 407K, 7% free 9679K/10375K, paused 3ms+3ms
D/dalvikvm﹕ GC_CONCURRENT freed 404K, 7% free 9681K/10375K, paused 6ms+3ms
D/dalvikvm﹕ GC_CONCURRENT freed 414K, 7% free 9689K/10375K, paused 8ms+3ms
D/dalvikvm﹕ GC_CONCURRENT freed 422K, 7% free 9680K/10375K, paused 4ms+4ms
D/dalvikvm﹕ GC_CONCURRENT freed 393K, 7% free 9680K/10375K, paused 4ms+2ms
D/dalvikvm﹕ GC_CONCURRENT freed 395K, 7% free 9690K/10375K, paused 6ms+6ms
D/dalvikvm﹕ GC_CONCURRENT freed 420K, 7% free 9682K/10375K, paused 5ms+2ms
D/dalvikvm﹕ GC_CONCURRENT freed 409K, 7% free 9680K/10375K, paused 4ms+3ms
D/dalvikvm﹕ GC_CONCURRENT freed 399K, 7% free 9680K/10375K, paused 6ms+5ms
D/dalvikvm﹕ GC_CONCURRENT freed 393K, 7% free 9682K/10375K, paused 6ms+2ms
D/dalvikvm﹕ GC_CONCURRENT freed 412K, 7% free 9680K/10375K, paused 5ms+3ms
D/dalvikvm﹕ GC_CONCURRENT freed 387K, 7% free 9681K/10375K, paused 6ms+3ms
W/Sensors﹕ sensorservice died [0x1e56260]
I/ActivityThread﹕ Removing dead content provider: settings
E/InputQueue-JNI﹕ channel '41d3d498 com.edu.jirka.naviin/com.edu.jirka.naviin.Navin (client)'
而在崩潰的時候,我有SensorDataSaver
的只是幾個instaces運行的偵聽器的像5至90秒。
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.Log;
import android.widget.Toast;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
/**
* Created by Jirka on 8/21/2015.
*
* - designed for sensor data saving to files on external storage
*/
public class SensorDataSaver implements SensorEventListener{
private SensorManager mSensorManager;
private BufferedWriter bw;
private Sensor mSensor;
/**
* class designed to save data of any 3D individual sensor.
*
* @param ma - activity for SensorManager, Resources access
* @param header - basic info about sensor
* @param ssr - sensor to by listen to
*/
public SensorDataSaver(Activity ma, String header, Sensor ssr, File sampleDir) {
mSensor = ssr;
mSensorManager = (SensorManager) ma.getSystemService(Context.SENSOR_SERVICE);
try {
// Header creation
File mFile = new File(sampleDir, mSensor.getName().replace(" ", "_") + "_Data.txt");
bw = new BufferedWriter(new FileWriter(mFile));
bw.write(header);
bw.append("Timestamp X_axis Y_axis Z_axis Current Accuracy\n");
}catch (NullPointerException n){
Log.e("File_Err","Fault during creating output file");
} catch (IOException e) {
Log.e("BuffW_Init","Fault during BufferedWriter init");
e.printStackTrace();
}
}
public void startCollecting(int del){
mSensorManager.registerListener(this,mSensor,del);
Log.i("sensorLis","added " + mSensor.getName());
}
public void finishCollecting(){
// deploy listener
mSensorManager.unregisterListener(this);
// close file
try {
bw.close();
} catch (IOException e) {
Log.e("BuffW_Close","Fault during BufferedWriter closing");
e.printStackTrace();
}
}
/* onSensorChanged method of SensorListener */
public void onSensorChanged(SensorEvent se) {
try {
bw.append(se.timestamp + " " + se.values[0] + " "
+ se.values[1] + " " + se.values[2] + " " + se.sensor.getPower() + " "
+ se.accuracy);
bw.newLine();
}catch (IOException e) {
e.printStackTrace();
Log.e("BW_APPEND",mSensor.toString() + " fault during appending sensor changes");
}
}
/* onAccuracyChanged method of SensorListener */
public void onAccuracyChanged(Sensor sensor, int accuracy) {
/* accuracy changes omitted due to accuracy logging in onSensorChanged
try {
bw.append("Accuracy " + sensor.getName() + " -> " + accuracy);
bw.newLine();
}catch (IOException e) {
e.printStackTrace();
Log.e("BW_APPEND", "Fault during appending accuracy changes");
}*/
}
}
所以,你有什麼想法如何減少GC行動,並保持傳感器服務免於死亡? 我需要能夠將傳感器數據記錄至少10分鐘。
謝謝。
您似乎在問兩個無關的問題:如何減少GC活動,以及如何防止傳感器服務死亡。後者似乎更重要,但不在你的問題的主題。你知道傳感器服務爲什麼會死亡嗎? – fadden
我不知道確切的,但我想記錄大約的傳感器數據。 6個傳感器與'SENSOR_DELAY_FASTEST',所以我想傳入消息sensorService可能會導致它。 –