我使用的服务会在服务器上有新的更新时更新我的应用程序。所以我的服务运行,它总是检查服务器版本更新,如果我得到新的版本更新,它将安装。
每当我关闭申请表taskmanager
时,我的问题都会被杀死。我在START_STICKY
中也使用onstartcommand()
,即使它不起作用。一旦stopped by taskmanager
,他们就有机会重启我的服务。
答案 0 :(得分:0)
您可以使用AlarmManager定期唤醒您的应用程序(即活动或服务)。这样您就不需要一直在后台运行服务。
只需将AlarmManager设置为每天/每周唤醒您的应用/服务,检查更新,然后关闭服务。查看this tutorial有关如何使用AlarmManager的信息。
这种方法比运行自己的服务更好,因为它不使用内存或电池供电。您的用户会为此感谢您!
如果您的应用程序设计为在21级或更高版本(即Android 5.0 Lollipop)上运行,您还可以利用JobScheduler。它可能很有用,即它可以安排更新检查以在设备插入时运行,以进一步节省电力。
答案 1 :(得分:0)
您可以覆盖此方法onTaskRemoved以通过BroadcastReceiver重新开始服务。
答案 2 :(得分:0)
来自文档:
请注意,onStartCommand()方法必须返回一个整数。整数是一个值,描述系统在系统杀死服务时应如何继续服务(如上所述,IntentService的默认实现为您处理此问题,尽管您可以对其进行修改)。 onStartCommand()的返回值必须是以下常量之一:
如果系统在onStartCommand()返回后终止服务,则不要重新创建服务,除非有待传递的待处理意图。这是避免在不需要时运行服务以及应用程序只需重新启动任何未完成的作业时最安全的选项。
START_STICKY 如果系统在onStartCommand()返回后终止服务,则重新创建服务并调用onStartCommand(),但不重新传递最后一个意图。相反,系统使用null intent调用onStartCommand(),除非有待启动的意图来启动服务,在这种情况下,这些意图被传递。这适用于不执行命令但无限期运行并等待工作的媒体播放器(或类似服务)。
如果系统在onStartCommand()返回后终止服务,则重新创建服务并使用传递给服务的最后一个意图调用onStartCommand()。任何待处理的意图依次交付。这适用于主动执行应立即恢复的作业的服务,例如下载文件。
您是否曾尝试使用onStartCommand()
返回START_REDELIVER_INTENT
?