我正在调查是否有任何方法可以防止由于未捕获的异常而杀死android服务。
我们有10个UI应用程序与5-6个服务进行通信。该平台是Android 2.2。
由于不可预见的条件,服务中的某些逻辑有时会抛出异常。这导致这些服务被那些烦人的ANR弹出窗口杀死。
当我们致力于解决导致这些异常的根本原因的解决方案时,我想防止Android杀死有问题的服务。
看来我可以为服务中的所有线程注册未捕获的默认异常处理程序。这只是让我有机会记录有关异常的信息。那很好。
我遇到了许多使用此技术将崩溃信息记录到文件中以供以后使用的帖子。
人们建议不要抛出原始异常以防止ANR弹出。我还发现一些文章建议它可以使您的服务处于半死状态。正确的做法是终止服务并重新启动。取消并重新启动不是我感兴趣的选项。
如果您不抛出异常,我不太了解半死状态部分。我将进一步调查。同时,我想知道人们是否有建议。
我的目标是防止ANR弹出窗口。我希望代码决定是否重启服务,而不是由Android框架为我决定。
我很好奇的发现是:
1)清单中是否有任何标志可以更改以防止服务被框架代码杀死?
2)您是否可以在Service中重写任何方法,让您处理未捕获的异常,但仍让服务线程返回等待状态,以等待来自客户端的下一个请求?
感谢您的建议。
Videoguy
更新:
未捕获的默认异常处理程序在这里没有帮助。它为您提供了记录内容的机会,但是服务线程仍然存在。
您需要更改android框架,以便它不会杀死进程。 android框架中的ActivityManagerService.java具有不同的阈值,可以在没有任何客户端的情况下运行服务多长时间,可以拥有多少后台活动/服务,服务超时和ui初始化。我们提高了这些价值观。
最佳答案
开发人员帮助防止其服务被杀死的一种常见方法是使用持久性通知(在通知栏中),该通知通常通过设置来启用。因此,如果用户在系统终止服务方面遇到问题,则可以打开通知。
关于android - 如何防止服务因未捕获的异常而被Android杀死?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10155330/