关闭后台时无法关闭服务

时间:2012-11-29 06:51:30

标签: android

我在onDestroy()方法中编写了这段代码。

@Override
public void onDestroy()
{
MessageService.this.stopSelf();
messageThread.isRunning = false;
System.exit(0);
super.onDestroy();
}

关闭其他活动中的服务。

stopService(new Intent(MainOptionActivity.this,MessageService.class));

我尝试了很多代码,关闭后台时无法关闭服务。有人能给我一些建议吗?感谢。

2 个答案:

答案 0 :(得分:2)

以下是服务类

的简单代码
public class MyService extends Service {

@Override
public IBinder onBind(Intent intent) {

    return null;
}

@Override
public void onCreate() {
    Toast.makeText(getApplicationContext(), "MSG onCreate SERVICE", Toast.LENGTH_LONG).show();
    super.onCreate();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Toast.makeText(getApplicationContext(), "MSG onStartCommand SERVICE", Toast.LENGTH_LONG).show();
    return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
    Toast.makeText(getApplicationContext(), "MSG STOP SERVICE", Toast.LENGTH_LONG).show();
    super.onDestroy();
}

}

以下是测试此服务的代码

 startService(new Intent(this, MyService.class));

    new Timer().schedule(new TimerTask() {

        @Override
        public void run() {
            startService(new Intent(getApplicationContext(), MyService.class));
        }
    }, 5000);

    new Timer().schedule(new TimerTask() {

        @Override
        public void run() {
            stopService(new Intent(getApplicationContext(), MyService.class));
        }
    }, 10000);

这工作得很好。还要在清单

中添加此代码
<service android:name=".MyService" />

答案 1 :(得分:1)

请勿在Android上使用System.exit(0),而是使用finish(例如,在活动中)。

但是没有必要停止自己的onDestroy方法,它实际上会被停止和销毁(这就是onDestroy方法的用途)。

使用System.exit(0);停止执行方法,因此系统永远不会达到super.onDestroy();点,服务也不会被破坏。

尝试

@Override
public void onDestroy() {
    messageThread.isRunning = false;
    super.onDestroy();
}