2

我有一个实现远程后台服务的应用程序。实现此服务以在线程中下载文件(我会说此服务用作下载管理器)。

当我想下载文件时,我将 url 发送到服务,服务启动一个线程(我使用的是 AsyncTask,但它只在 Android 4.1 中工作),它实际下载文件。但迟早下载会停止,我能够知道这一点,因为我显示的通知不再更新。当我单击通知取消下载时,会向服务发送一个挂起的意图,告诉它取消下载,但在重新创建服务时不会取消下载(调用 onCreate)。

编辑:忘了说我在 onStartCommand() 中返回 START_STICKY

我有什么解决方案?有什么办法可以避免服务被杀死?

我也在研究 startForeground(),如果服务目标是只下载一个文件但我希望支持同时下载多个文件,那就没问题了。

谢谢你。

4

2 回答 2

2

防止您的服务被杀死的唯一方法是使用startForeground(). 即使这样也不能保证 Android 不会杀死你的服务,但没有比这更好的了。我们在使用前台服务方面取得了很好的成功。

于 2012-11-07T12:58:16.793 回答
0

在我见过的系统中避免这种情况的唯一方法是将服务设为系统服务,但为此您需要拥有 AOSP 的权限并扩展 SystemService 类。

这样的 SystemService 需要编译和创建为 services.jar 的一部分,它是 android 的所有系统服务的组合。不幸的是,考虑到外部服务可能会给系统带来问题,这增加了系统服务稳定性的风险。

当然,对于应用程序开发人员来说,这并不是一件容易的事情,但这种方法更适合从事完整 AOSP 工作的 OEM/SoC 供应商。

于 2016-07-27T14:53:03.920 回答