0

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

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

并在其他 Activity 中关闭该服务。

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

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

4

2 回答 2

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" />
于 2012-11-29T07:38:51.450 回答
1

不要System.exit(0)在 Android 上使用,而是使用finish(例如在 Activity 中)。

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

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

试一试

@Override
public void onDestroy() {
    messageThread.isRunning = false;
    super.onDestroy();
}
于 2012-11-29T07:21:05.107 回答