Я просто пытаюсь записать данные акселерометра и написать файл в SD-карте нажатием кнопки. Во время запуска приложения в моем Nexus S (с 4.1.2) он замораживается через минуту. Я попытался запустить его в телефоне Galaxy Nexus, и он работает плавно. По некоторым причинам я должен работать в Nexus S. Может кто-нибудь предложить мне, что может быть причиной сбоя. Я попытался просмотреть журнал, но это не связано с каким-либо сообщением об ошибке.Приложение зависает во время записи данных акселерометра: Android
Вот мой код:
final SensorEventListener mySensorEventListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
xAxis_lateralA = sensorEvent.values[0];
yAxis_longitudinalA = sensorEvent.values[1];
zAxis_verticalA = sensorEvent.values[2]; // TODO apply the acceleration changes to your application.
textView.append("\nACC_x = "+ xAxis_lateralA + ", ACC_y = "+yAxis_longitudinalA+ ", ACC_z = " + zAxis_verticalA);
acc += "\n"+miliSec()+", "+xAxis_lateralA + ", "+ yAxis_longitudinalA+", "+zAxis_verticalA;
try {
File myFile = new File("/sdcard/acc.txt");
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
myOutWriter.append(acc);
myOutWriter.close();
fOut.close();
} catch (Exception e) {
Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
};
startButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(getBaseContext(),"Done writing SD 'acc.txt'",Toast.LENGTH_SHORT).show();
sm = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
int sensorType = Sensor.TYPE_ACCELEROMETER;
sm.registerListener(mySensorEventListener,sm.getDefaultSensor(sensorType), SensorManager.SENSOR_DELAY_NORMAL);
}// onClick
}); // btnWriteSDFile
stopButton = (Button) findViewById(R.id.stopButton);
stopButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
int sensorType = Sensor.TYPE_ACCELEROMETER;
sm.unregisterListener(mySensorEventListener, sm.getDefaultSensor(sensorType));
Toast.makeText(getBaseContext(), "Stopped Recording",Toast.LENGTH_SHORT).show();
finish();
}// onClick
}); // btnstopButton
Операции с файлами, по-видимому, выполняются в потоке пользовательского интерфейса. Вероятно, это причина зависаний. Для этой цели рассмотрите использование Thread или AsyncTask. –
Хорошо спасибо за предложение. Я делаю это. – Pow
Ну, я попробовал добавить подкласс и вызвал метод execute сразу после 'acc + =" \ n "+ miliSec() +", "+ xAxis_lateralA +", "+ yAxis_longitudA +", "+ zAxis_verticalA;' .. Не чувствуя никаких разница. – Pow