35

Androidアプリケーションに常に実行されるサービスがあります。これで、サーバーからGCMを介して設定を行い、これらの設定をサービスに更新します。設定をoncreateofserviceに入れました。したがって、最新の設定を取得するには、サービスを再起動する必要があります。サービスを再開するにはどうすればよいですか?

4

7 に答える 7

49

この 2 つのメソッドを続けて呼び出すと、Serviceが停止して開始します。それを「再起動」する方法を知りません。これが私のアプリケーションに実装した方法です。

stopService(new Intent(this, YourService.class));
startService(new Intent(this, YourService.class));
于 2012-11-05T08:13:26.473 に答える
15

最善の解決策は、onDestroy() を使用することです。

サービスを再起動する必要がある場合は、呼び出すだけです

RESTARTSERVICE = true;
stopService(new Intent(this, CLASS_OF_SERVICE.class));

public void onDestroy()
{
   if (RESTARTSERVICE)
    {
       startService(new Intent(this, CLASS_OF_SERVICE.class));
    }
}
于 2015-03-12T13:47:14.937 に答える
4

設定を onCreate から別のメソッドに移動してみませんか。次に、このメソッドを onCreate から呼び出し、設定を変更する必要があるときに呼び出すこともできます。その後、実際にサービスを再起動する必要はありません。

于 2012-11-05T07:26:04.847 に答える
2

サービス内でメソッド onTaskRemoved(Intent rootIntent) を使用するため、サービスが再度再開されます

@Override
public void onTaskRemoved(Intent rootIntent) {
    System.out.println("service in onTaskRemoved");
    long ct = System.currentTimeMillis(); //get current time
    Intent restartService = new Intent(getApplicationContext(),
            PushService.class);
    PendingIntent restartServicePI = PendingIntent.getService(
            getApplicationContext(), 0, restartService,
            0);

    AlarmManager mgr = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
    mgr.setRepeating(AlarmManager.RTC_WAKEUP, ct, 1 * 1000, restartServicePI);
}
于 2016-09-07T05:51:06.637 に答える
-1

または、遅延ハンドラーを使用してサービスを開始できます。ハンドラーはシングルトンで静的に宣言する必要があるため、その参照は再起動中に強制終了されません。

serviceRestartHandler = new Handler ();
serviceRestartHandler.postDelayed (new Runnable () {
            @Override
            public void run() {

                startService (new Intent (mContext, YourWonderfulService.class)
                        .putExtra (flagName, true));
                serviceRestartHandler.removeCallbacksAndMessages (null);
            }
        }, 1000);
        stopSelf ();
于 2020-01-29T12:14:32.527 に答える
-7

サービスがすでに実行されている場合は、もう一度呼び出すだけstartService()でサービスが再開されます。つまり、サービスが再開されます。

于 2014-09-30T06:26:37.283 に答える