Help! 나는 무한 루프에 빠졌고 나는 일어날 수 없다!onSensorChanged의 무한 루프
는
**** MisbehavingActivity에서 onCreate
결과.**** MisbehavingActivity onResume Register.
**** MisbehavingActivity onAccuracyChanged.
**** 잘못된 측정 가속도계 onSensorChanged.
**** MisbehavingActivity onPause Unregister.
**** 잘못된 측정 가속도계 onSensorChanged.
**** MisbehavingActivity onPause Unregister.
**** 잘못된 측정 가속도계 onSensorChanged.
**** MisbehavingActivity onPause Unregister.
**** 잘못된 측정 가속도계 onSensorChanged.
**** MisbehavingActivity onPause Unregister.
**** 잘못된 측정 가속도계 onSensorChanged.
**** MisbehavingActivity onPause Unregister.
등 등까지 :
package com.apackage.amiok;
import android.content.Context;
//import android.content.Intent;
import android.hardware.Sensor;
import static android.hardware.Sensor.TYPE_ACCELEROMETER;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MisbehavingActivity extends AbstrActivity implements OnClickListener, SensorEventListener {
private static final String TOAST = "**** MisbehavingActivity ";
SensorManager sensorManager;
Sensor accelerometer;
Button aButton;
//SensorEventListener sensorListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
logStuff(TOAST + "onCreate. ");
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
accelerometer = sensorManager.getDefaultSensor(TYPE_ACCELEROMETER);
setContentView(R.layout.activity_main);
aButton = ((Button) findViewById(R.id.buttonToStop));
aButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
logStuff(TOAST + "onClick.");
onPause();
finish();
}
@Override
public void onResume() {
logStuff(TOAST + "onResume Register.");
super.onResume();
// register the listener
accelerometer = sensorManager.getDefaultSensor(TYPE_ACCELEROMETER);
sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_GAME);
}
@Override
public void onPause() {
logStuff(TOAST + "onPause Unregister.");
// unregister the listener for all sensors
sensorManager.unregisterListener(this);
super.onPause();
}
// SensorEventListener stuff
@Override
public void onSensorChanged(SensorEvent event) {
logStuff(TOAST + "Accelerometer onSensorChanged.");
onPause();
finish();
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
logStuff(TOAST + "onAccuracyChanged.");
// Not sure I need to do anything here...
}
}
감사합니다. Joseph! 실제로 처음부터 그런 식으로 했었지만 똑같은 결과가 나왔기 때문에 바꿨습니다. 진짜 질문은 왜 내 "unregisterListener"문이 작동하지 않는 것입니까? – Thisland
내 업데이트를보세요. – Joseph
흠. 나는 Joseph이 제안한 "우수 사례"변경 사항을 작성했으며, 내 AbstrActivity에있는 logStuff에 대한 모든 호출을 makeNotification으로 대체했으며 다소 도움이되었지만 onSensorChanged 메소드가 적어도 두 번 호출되는 것처럼 보입니다. 등록을 취소하기 전에! 적어도 지금은 충돌하지 않습니다. 감사! – Thisland