当应用程序被销毁时,粘性服务和意图服务会被终止。

4
在我的应用程序中,即使用户通过最近的应用程序管理器通过滑动强制停止并退出,我仍然想下载图像。为什么我要这样做,只有一个原因:

因为我希望用户从活动中给出的按钮停止下载

所以,我首先创建了异步任务,即使活动被销毁,它也可以正常工作。但是当我使用最近的应用程序管理器销毁/杀死我的应用程序时,应用程序会被杀死,因此服务也会被停止。

然后我将我的异步任务移动到了黏性服务中,我认为当用户从最近的应用程序列表中关闭应用程序时,它不应该被销毁,但是服务会停止。尽管有时会重新启动,但由于某些原因,我只想让它不停止并像Google Play商店一样下载。无论你做什么,都不能停止应用程序的下载,除非你在Google Play商店应用程序中使用停止按钮。

然后我阅读了关于IntentService的内容,关于IntentService,我了解到:

您可以运行意图服务并忘记它,因为它会在任务完成后自动停止。

所以我认为这是一些东西,即使用户停止它或通过滑动从最近的应用程序列表中关闭应用程序,也无法被杀死,因为意图服务将执行其任务并停止自己

但是所有都徒劳无功。我已经阅读了许多关于服务以及如何治愈服务不被杀死的内容。我知道启动服务为前台的方法。

但是其他顶级应用程序采用哪些其他方式来使后台一直工作,例如安全应用程序,基于GPS的应用程序和其服务始终在后台运行的防病毒应用程序。您可以在Google Play商店应用程序中检查相同的行为,您可以开始下载任何应用程序并退出Play商店应用程序,甚至从最近的应用程序托盘中,但它会继续下载,除非您转到通知栏单击通知,导航到最终看到停止下载按钮以停止下载应用程序的位置。

那么我该如何实现这一点?服务有什么问题或者我还可以使用什么来获得与Google Play商店相同的行为。

请指导我。您的评论和讨论将不胜感激。


1
那么,你是如何解决这个问题的? - Turkhan Badalov
非常好的问题 (y),我也在思考同样的事情。 - Sudhanshu Gaur
3个回答

1

那你很可能做错了什么。你使用的是什么进程名称? - Kuffs
我只是在使用asynctask,在那个服务中。 - Coas Mckey
我的包名,我当时认为它很独特,所以我使用了它。 - Coas Mckey
尝试使用简单的名称,例如“:NoKill”,在开头加上冒号。阅读文档以了解冒号的作用说明。 - Kuffs
让我们在聊天中继续这个讨论 - Coas Mckey
显示剩余3条评论

0
你需要的是一个前台服务。关于服务的安卓开发者指南指出:

前台服务是指用户明确知道并且不会在内存不足时被系统杀死的服务。前台服务必须为状态栏提供通知,该通知位于“正在运行”标题下,这意味着除非停止服务或将其从前台中删除,否则无法解除通知。


我知道这个,但我想知道其他的方法?还有,谷歌应用商店是如何工作的? - Coas Mckey
任何无法从通知栏中解除的通知都是前台服务。这意味着 Google Play 或任何其他不可解除的通知都是前台服务。 - Eric B.
不是真的。通知可以简单地设置其FLAG_ONGOING_EVENT标志,这将防止它被解除。它不一定需要附加服务。 - Kuffs
如何将Intent Service作为前台服务启动,我需要编写什么命令? - Coas Mckey
请在页面顶部使用搜索框:https://dev59.com/sWw15IYBdhLWcg3wy-vO - Kuffs
@Kuffs 我不知道那个。我想那是我必须尝试的东西。 - Eric B.

0

在服务的 onStartCommand 方法中,您可以使用 return START_STICKY。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接