我的Android应用程序中有一项服务,它始终运行。现在我通过GCM从我的服务器获得设置并将这些设置更新到我的服务。我把我的设置放在了oncreate of service上。所以我需要重新启动我的服务以获取最新设置。如何重启我的服务?
答案 0 :(得分:41)
紧接着调用这两种方法,这将导致Service
停止并开始。不知道任何“重启”它的方法。这就是我在我的应用程序中实现它的方式。
stopService(new Intent(this, YourService.class));
startService(new Intent(this, YourService.class));
答案 1 :(得分:14)
最好的解决方案是使用onDestroy()。
当需要重新启动服务时,只需调用
RESTARTSERVICE = true;
stopService(new Intent(this, CLASS_OF_SERVICE.class));
和
public void onDestroy()
{
if (RESTARTSERVICE)
{
startService(new Intent(this, CLASS_OF_SERVICE.class));
}
}
答案 2 :(得分:4)
为什么不将设置内容从onCreate移动到单独的方法。然后,您可以从onCreate调用此方法,并在需要更改设置时调用它。然后就没有必要实际重启服务了。
答案 3 :(得分:1)
在服务中使用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);
}
答案 4 :(得分:0)
在 KOTLIN 中,您可以这样做:
AppLog.i("System UI Service is Restarting")
val startSystemUiIntent = Intent(context, AwesomeService::class.java)
val restartServicePendingIntent = PendingIntent.getService(context, 1, startSystemUiIntent, PendingIntent.FLAG_ONE_SHOT)
val alarmManager = getSystemService(ALARM_SERVICE) as AlarmManager
alarmManager.setExact(AlarmManager.RTC_WAKEUP, SystemClock.currentThreadTimeMillis(), restartServicePendingIntent)
stopService(Intent(context, SystemUIService::class.java))
答案 5 :(得分:-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 ();
答案 6 :(得分:-5)
再次呼叫startService()
如果服务已经运行,将再次启动服务,这意味着服务将重新启动。