我已经实现了 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);
}
最佳答案
为了确保您的服务即使在启动几个小时后也能运行,那么您必须使用 AlarmManager
,即使应用程序被终止,它也会按指定的周期重复运行。您要做的就是注册一个 PendingIntent
供 AlarmManager
触发,该事件将由 BroadcastReceiver
接收并在 BroadcastReceiver
中code> 您将检查您的服务是否正在运行。如果正在运行,则不执行任何操作,如果没有则启动该服务。
What I want to do is keep a service running always in the background and restart even when the device is rebooted.
为了执行此操作,您必须在 list 中授予此权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
然后您必须创建一个自定义的BroadcastReceiver
,它将检查要触发的 Intent ,即Action.BOOT_COMPLETED
。
您应该声明您的 BroadcastReceiver 以在 Android Manifest 中捕获上述 Intent ,如下所示:
<receiver android:name="com.example.MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
现在,您可以在 BroadcastReceiver
类中初始化 AlarmManager,也可以编写代码来直接启动服务。
有关 AlarmManager 的信息可以找到 here .
Disclaimer: Starting from Android O, Google will stop supporting Unbound Background Service and calling startService() will become Illegal(Android will throw IllegalStateException) when calling this function.
关于java - 即使重新启动后也保持服务始终运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43698568/