Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
避免Android服务被杀?_Android_Android Service - Fatal编程技术网

避免Android服务被杀?

避免Android服务被杀?,android,android-service,Android,Android Service,我有一个实现远程后台服务的应用程序。这个服务是用来下载线程中的文件的(我想说这个服务是一个下载管理器) 当我想下载一个文件时,我将url发送到服务,服务启动一个线程(我使用的是AsyncTask,但它只在Android 4.1中起作用),在那里它实际下载文件。但下载迟早会停止,我能够知道这一点,因为我显示的通知不再更新。当我单击通知取消下载时,会向服务发送一个挂起的意图,告诉它取消下载,但不会在重新创建服务时取消下载(onCreate被调用) 编辑:忘记在onStartCommand()中返回S

我有一个实现远程后台服务的应用程序。这个服务是用来下载线程中的文件的(我想说这个服务是一个下载管理器)

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

编辑:忘记在onStartCommand()中返回START\u STICKY

我有什么解决办法?有没有办法避免服务被杀

我还研究了startForeground(),如果服务目标是只下载一个文件,但我希望支持同时下载多个文件,那就可以了


谢谢。

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

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

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


当然,这对于应用程序开发人员来说并非易事,但这种方法更适合于使用完整AOSP的OEM/SoC供应商。

谢谢。最后,我将服务限制为一次只下载一次,并使用startForeground()。工作得很有魅力!我不明白为什么不能使用前台服务进行多个并行下载?您可以在单独的线程中下载每个文件。这没有理由不起作用。当然,我可以做到,但我需要一种方法来调用startForeground(),而不传递通知。