帮助!我陷入无休止的循环,我无法起床!
结果
**** onCreate上行为不端的活动。
****在计划注册时行为错误。
****关于精确度变化的行为不端。
**** MisbehavingActivity Accelerometer onSensorChanged。
**** MisbehavingActivity onPause取消注册。
**** MisbehavingActivity Accelerometer onSensorChanged。
**** MisbehavingActivity onPause取消注册。
**** MisbehavingActivity Accelerometer onSensorChanged。
**** MisbehavingActivity onPause取消注册。
**** MisbehavingActivity Accelerometer onSensorChanged。
**** MisbehavingActivity onPause取消注册。
**** MisbehavingActivity Accelerometer onSensorChanged。
**** MisbehavingActivity onPause取消注册。
等。等等,直到:
“不幸的是,Amiok已经停止了”
以下是代码:
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...
}
}
答案 0 :(得分:0)
您正在将Activity实例注册为SensorEventListener两次,在onCreate和onResume方法上,只在onResume方法上保留一个注册,并在onCreate方法上删除注册。好的做法是调用onPause和onResume上的第一个超级方法。查看SensorManager上的示例代码。