【问题标题】:Codes are still running when Back or Home button pressed, Android按下返回或主页按钮时,代码仍在运行,Android
【发布时间】:2015-05-17 03:44:09
【问题描述】:
当我的应用活动通过主页按钮或返回按钮进入后台时,一些侦听器代码(如 requestLocationUpdates 或线程)仍在运行,为什么?
【问题讨论】:
标签:
android
multithreading
listener
onpause
【解决方案1】:
关于线程的问题:
在 5he 运行方法中始终有一个循环,您可以通过 isRunning 等布尔值控制该循环,例如
和一个由 !isPaused 控制的内部循环,例如
如果你想“暂停”线程,只需将 isPaused 设置为 true,如果你想终止它,请将 isRunning 设置为 false(isPaused 为 true)
在运行循环中让线程休眠100ms,让他每100+ms唤醒一次,检查是否仍然暂停
【解决方案2】:
您可以在类中实现这两个回调方法(Activity 扩展的地方)并编写代码来处理当 Activity 隐藏和按下后退按钮(或其他按钮)时的执行
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
/*code to handle when back button is pressed*/
}
else if (keyCode == KeyEvent.KEYCODE_HOME) {
/*code to handle when HOME sbutton is pressed*/
}
return false;
}
@Override
protected void onPause() {
/*code to handle when activity goes in background and becomes inactive*/
super.onPause();
}
【解决方案3】:
在调用 onpause 方法时添加代码到暂停位置。这是我正在使用的。 locationManager是LocationManager的对象
@Override
protected void onPause() {
if(locationManager != null){
locationManager.removeUpdates(GPSTracker.this);
}
super.onPause();
}