即使在重新启动后也始终保持服务运行

时间:2017-04-29 17:29:26

标签: java android service

我已经实现了START_STICKY命令,但是服务在几个小时后被杀死了。我想要做的是让服务始终在后台运行,并在重启设备时重新启动。我可以像这样在onDestroy方法中重启服务吗?或者有更方便的方法吗?

 @Override
public void onDestroy() {

   Stop();

    Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();

    Intent i= new Intent(getApplicationContext(), MyService.class);
    startService(i);


}

1 个答案:

答案 0 :(得分:0)

为了确保您的服务即使在启动几个小时后仍在运行,您将必须使用AlarmManager,即使应用程序被终止,它也会在指定的周期内重复运行。您要做的是为PendingIntent注册一个AlarmManager来点击BroadcastReceiverBroadcastReceiver您将检查您的服务是否正在运行或不。如果正在运行,则不执行任何操作,如果没有则启动该服务。

  

我想要做的是让服务始终在后台运行,并在重启设备时重新启动。

为此,您必须在清单中提供此权限:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

然后你必须制作一个自定义BroadcastReceiver,它会检查被触发的意图Action.BOOT_COMPLETED

您应该声明您的BroadcastReceiver在Android Manifest中捕获上述意图,如下所示:

<receiver android:name="com.example.MyBroadcastReceiver">  
  <intent-filter>  
    <action android:name="android.intent.action.BOOT_COMPLETED" />  
  </intent-filter>  
</receiver>

现在您可以在BroadcastReceiver课程中初始化您的AlarmManager,或者您可以编写代码以立即开始服务。

可以找到有关AlarmManager的信息here

  

<强>声明:   从 Android O 开始,Google将停止支持Unbound Background Service,并在调用此函数时调用startService()将变为非法(Android将抛出IllegalStateException)。