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

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

  • 用于getRunningServices的Android O替换
  • 如何在锁定屏幕上执行通知操作(单击)?
  • 用于小部件更新的RemoteViews超出最大位图内存使用错误
  • 防止Android服务的多个副本
  • 在ListView Android中使用进度条下载多个文件
  • 从服务Android调用Toast时出错
  • 永久收听剪贴板更改
  • Android Service扩展了ResultReceiver for IntentService,如何实现CREATOR?
  • 将这两种方法紧接着调用,这将导致Service停止并启动。 不知道任何“重启”它的方法。 这就是我在我的应用程序中实现它的方式。

     stopService(new Intent(this, YourService.class)); startService(new Intent(this, YourService.class)); 

    最好的解决方案是使用onDestroy()。

    当需要重新启动服务时才调用

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

     public void onDestroy() { if (RESTARTSERVICE) { startService(new Intent(this, CLASS_OF_SERVICE.class)); } } 

    为什么不将设置内容从onCreate移动到单独的方法。 然后,您可以从onCreate调用此方法,并在需要更改设置时调用它。 然后就没有必要实际重启服务了。

    在服务内部使用方法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); } 

    只要再次调用startService() ,如果服务已经运行,它将再次启动服务,这意味着服务将重新启动。