0

このコードはonDestroy()メソッドで記述します。

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

そして、他のアクティビティでサービスを閉じます。

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(たとえば、アクティビティで)使用してください。

ただし、メソッド自体を停止する必要はありませんonDestroy。実際には、メソッドを停止して破棄します(これがonDestroyメソッドの目的です)。

でメソッドの実行を停止するSystem.exit(0);と、システムがポイントに到達すること super.onDestroy();はなく、サービスが破棄されることもありません。

ただ試してみてください

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