我有一个实现远程后台服务的应用程序。实现此服务是为了下载线程中的文件(我想这个服务可以作为下载管理器使用)。
当我想下载文件时,我将url发送到该服务,该服务启动一个线程(我使用的是AsyncTask但它只在Android 4.1中工作),它实际上下载了该文件。但迟早下载停止,我能够知道,因为我显示的通知不再更新。当我单击通知取消下载时,会向服务发送待处理的意图以告知它取消下载,但在重新创建服务时不会取消下载(onCreate被调用)。
编辑:忘了说我在onStartCommand()中返回START_STICKY
我有什么解决方案?有什么方法可以避免服务被杀?
我也在寻找startForeground(),如果服务目标只下载一个文件但我希望支持同时下载多个文件,那就没问题了。
谢谢。
答案 0 :(得分:2)
关于阻止服务被杀的唯一方法是使用startForeground()
。即使这不能保证Android不会杀死你的服务,但没有更好的东西。我们使用前台服务取得了很大的成功。
答案 1 :(得分:0)
在我看到的系统中避免这种情况的唯一方法是将服务作为系统服务,但为此你需要拥有AOSP的特权并扩展SystemService类。
这样的SystemService需要作为services.jar的一部分进行编译和创建,它是android的所有系统服务的组合。不幸的是,考虑到外部服务可能会给系统带来问题,这增加了系统服务稳定性的风险。
当然,对于应用程序开发人员而言,这不是一件容易实现的事情,而是针对在完整AOSP上工作的OEM / SoC供应商而言,这种方法更多。