停止后台服务当应用程序转到后台
我在我的android应用程序中有后台服务,我从MainActivity onResume()方法启动服务,并且它工作正常。但是当用户按Home按钮时,如何停止服务。因为当前时用户按Home键,然后应用移动到后台,然后用户打开一些其他的应用程序,然后一段时间我的服务方法被调用,应用力stop.Below是我开始服务代码后 -停止后台服务当应用程序转到后台
Intent msgIntent = new Intent(mContext, MyBackgroundService.class);
startService(msgIntent);
在此先感谢。
EDITED
在我的服务我用下面的代码 - 在我的活动
public void callAsynchronousTask() {
final Handler handler = new Handler();
timer = new Timer();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
callWebservice();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
};
timer.schedule(doAsynchronousTask, START_DELAY, DELAY);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
callAsynchronousTask();
return Service.START_NOT_STICKY;
}
@Override
public void onCreate() {
mContext = this;
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
if(timer!=null){
timer.cancel();
}
stopSelf();
}
我用下面的代码一站式服务 -
@Override
protected void onStop() {
try{
stopService(new Intent(this, MyBackgroundService.class));
isServiceRunning = false;
}
catch(Exception e){
e.printStackTrace();
}
super.onStop();
}
@Override
protected void onPause() {
try{
stopService(new Intent(this, MyBackgroundService.class));
isServiceRunning = false;
}
catch(Exception e){
e.printStackTrace();
}
super.onPause();
}
,但我的服务运行,而我使用一些其他的应用程序,它强制停止应用程序。从后台服务我打电话给一些web服务,然后将服务响应存储在数据库中。
停止在的onPause服务()和的onStop()
mContext.stopService(new Intent(mContext,
MyBackgroundService.class))
按Home键事业的onPause()函数。覆盖的onPause()并调用stopService: mContext.stopService(新意图(mContext, MyBackgroundService.class))
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_HOME){
Log.e("home key pressed", "****");
//编写代码这里停止活动enter code here
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onPause() {
Log.e("home key pressed on pause", "****");
// write your code here to stop your service
super.onPause();
}
的上面的代码会检查用户是否按下了home按钮。
当我们打开其他应用程序时,我们的应用程序(在后台)从内存中清除。但是整个应用程序不会被删除,但一些不需要的数据和活动会完成。 在你的情况下,当尝试更新UI时,要更新的活动将从内存和正在运行的后台服务中清除,然后通过抛出NullPointerException来崩溃。
所以请保存在onCreate()中的活动的引用(其UI将被更新),并在finish()方法中将引用设置为null,然后在后台服务中检查此引用,如果它不为null,则更新用户界面,否则没有更新。
// Global Class for saving the reference
class GlobalReference{
public static <name_of_your_activity> activityRef;
}
在活动
onCreate(){
GlobalReference.activityRef = this;
}
finish(){
GlobalReference.activityRef = null;
}
在你的后台服务
if(GlobalReference.activityRef != null){
// update the UI of your activity
}
希望这个代码将解决您的问题。 快乐编码...
请检查更新的问题。因为我已经尝试了您的代码,但仍然应用程序崩溃,而应用程序在后台和其他应用程序正在运行。 – Ravi 2014-10-18 12:17:27