我已经实现了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);
}
答案 0 :(得分:0)
为了确保您的服务即使在启动几个小时后仍在运行,您将必须使用AlarmManager
,即使应用程序被终止,它也会在指定的周期内重复运行。您要做的是为PendingIntent
注册一个AlarmManager
来点击BroadcastReceiver
,BroadcastReceiver
您将检查您的服务是否正在运行或不。如果正在运行,则不执行任何操作,如果没有则启动该服务。
我想要做的是让服务始终在后台运行,并在重启设备时重新启动。
为此,您必须在清单中提供此权限:
<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)。