我需要在用户退出应用程序后停止我的应用程序所做的一切(如振动),我该怎么做?我的应用程序振动手机一段时间,用户选择,但如果用户启动,并退出应用程序..手机继续振动选择的时间..我怎么能对待这个错误?
public class MainActivity extends Activity {
EditText tempo;
Button bt;
Thread t;
int estado = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tempo = (EditText) findViewById(R.id.tempo);
//long delay = Long.parseLong(tempo.getText().toString());
bt = (Button) findViewById(R.id.btvibrar);
bt.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
if (!tempo.getText().toString().equals("")) {
if (estado == 1) {
Vibrar();
estado *= -1;
bt.setText("Parar !");
bt.setBackgroundColor(Color.RED);
//Handler handler = new Handler();
//handler.postDelayed(new Runnable() {
//@Override
//public void run() {
//estado*=-1;
//bt.setText("Vibrar !");
//bt.setBackgroundColor(Color.GREEN);
//}
// }, );
} else {
Parar();
estado *= -1;
bt.setText("Vibrar !");
bt.setBackgroundColor(Color.GREEN);
}
} else {
AlertDialog.Builder dialogo = new AlertDialog.Builder(MainActivity.this);
dialogo.setTitle("Erro !");
dialogo.setMessage("Escolha um tempo.");
dialogo.setNeutralButton("OK", null);
dialogo.show();
}
}
private void Vibrar() { // É necessario lançar excessao no ANDROIDMANIFEST.XML
Vibrator rr = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
long treal = Long.parseLong(tempo.getText().toString());
long milliseconds = treal * 1000;
rr.vibrate(milliseconds);
}
private void Parar() {
Vibrator rr = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
rr.cancel();
}
});
}
}
答案 0 :(得分:1)
首先,您需要区分退出和暂停应用程序(如果另一个应用程序到达前台,则会发生暂停)。其次,您需要覆盖适当的方法来处理应用程序暂停或销毁时发生的情况。
例如,覆盖
protected void onPause() {}
将允许您定义应用程序暂停时应该发生的事情,因此,您可以优雅地停止应用程序正在执行的操作。
同样,如果需要,您可以实施onStop
和onDestroy
。但在您的情况下,我相信onStop
和onPause
就足够了:)
另外,尝试给这个页面看一下,它给出了活动生命周期的详细描述 http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
答案 1 :(得分:0)
您需要在活动的onStop()
停止振动服务。
@Override
protected void onStop() {
Vibrator rr = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
rr.cancel();
}
答案 2 :(得分:0)
将onPause
添加到您的动画中并从那里取消振动器:
@Override
public void onPause() {
Parar();
}
当您的活动进入前台并且其他活动出现时(例如,当您的活动处于前台时拨打电话),这将停止振动器。这可能是比仅在应用程序完成时取消振动器更理想的行为。