当应用程序被销毁时,Sticky Service和Intent Service会被杀死

时间:2015-11-11 12:51:30

标签: android android-service android-intentservice

在我的应用程序中,我试图下载图像,即使用户强制停止它并使用最近的应用程序管理器通过滑动退出它。为什么我想要这种行为,它只有一个原因,那就是:

  

因为我希望用户停止从活动

中给出的按钮下载

所以为此我首先做了异步任务,即使活动被破坏也很好用但是当我使用最近的应用程序管理器销毁/杀死我的应用程序时应用程序被杀死所以服务

然后我将我的异步任务移动到粘性服务,我认为当用户从最近的应用程序列表关闭应用程序时它不会被破坏,但服务停止。虽然有时它会重新开始,但由于某些原因我只是想让它不像谷歌游戏商店那样停下来下载。无论你做什么,你都不能停止下载应用程序,除非你在谷歌游戏商店应用程序中使用停止按钮。

然后我读到了IntentService,关于我读过的意图服务,

  

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

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

但是一切都在静脉。我已经阅读了许多关于服务以及如何通过未被杀害来治疗服务的事情。我开始知道如何开始服务。

但是其他顶级应用程序采用了哪些其他方式来保持后台工作,例如安全应用程序,基于gps的应用程序以及其服务一直在后台运行的防病毒应用程序。 你可以检查谷歌游戏商店应用程序的相同行为,你可以开始下载任何应用程序并退出游戏商店应用程序,甚至从最近的应用程序托盘,但它会继续下载,除非你去通知栏点击通知,导航到最终看到停止下载按钮停止下载应用程序的地方。

那么我怎样才能做到这一点?服务有什么问题,或者我可以使用什么来获得与google play store相同的行为。

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

3 个答案:

答案 0 :(得分:1)

听起来您希望在与主应用程序不同的进程中运行您的服务,因此如果从“Recent Tasks”列表中删除该应用程序,它就不会被杀死。

这可以通过使用此处文档中说明的“Process”属性来实现: http://developer.android.com/guide/topics/manifest/service-element.html#proc

答案 1 :(得分:0)

您需要的是ForegroundService。关于服务的android开发人员指南指出:

  

前台服务是一种被认为是用户主动意识到的内容的服务,因此在内存不足时不会被系统杀死。前台服务必须提供状态栏的通知,该通知位于“正在进行”标题下,这意味着除非服务被停止或从前台删除,否则无法解除通知。

答案 2 :(得分:0)

您可以在服务中的onStartCommand中使用返回START_STICKY