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