如何在android中重启服务再次调用服务oncreate

时间:2012-11-05 07:23:37

标签: android android-service

我的Android应用程序中有一项服务,它始终运行。现在我通过GCM从我的服务器获得设置并将这些设置更新到我的服务。我把我的设置放在了oncreate of service上。所以我需要重新启动我的服务以获取最新设置。如何重启我的服务?

7 个答案:

答案 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()如果服务已经运行,将再次启动服务,这意味着服务将重新启动。