1

我正在调查是否有任何方法可以防止 android 服务因未捕获的异常而被杀死。
我们有 10 个 UI 应用程序与 5-6 个服务通信。该平台是Android 2.2。
由于不可预见的情况,服务中的一些逻辑不时抛出异常。这导致这些服务被那些烦人的 ANR 弹出窗口杀死。在我们致力于解决这些异常的根本原因的解决方案时,我希望防止 Android 终止有问题的服务。

看起来我可以为服务中的所有线程注册未捕获的默认异常处理程序。这只是让我有机会记录有关异常的信息。那很好。我遇到了许多使用这种技术将崩溃信息记录到文件以供以后使用的帖子。人们建议不要抛出原始异常以防止 ANR 弹出。我还发现一些文章表明它可以让你的服务处于半死状态。正确的做法是终止服务并重新启动。杀死和重新启动不是我感兴趣的选项。

如果您不抛出异常,我不太了解半死状态部分。我要进一步调查。同时我想知道人们是否有建议。
我的目标是防止 ANR 弹出窗口。我希望我的代码决定是否重新启动服务,而不是由 Android 框架为我决定。

我很好奇的是:
1)清单中是否有任何标志可以更改以防止服务被框架代码杀死?

2) 是否有任何方法可以在服务中覆盖,让您处理未捕获的异常,但仍然让服务线程返回等待状态以等待来自客户端的下一个请求?

感谢您的建议。

视频人

更新
未捕获的默认异常处理程序在这里没有帮助。它让你有机会记录一些东西,但服务线程仍然退出。

您需要更改 android 框架,以便它不会杀死进程。android 框架中的 ActivityManagerService.java 有不同的阈值,服务可以在没有任何客户端的情况下运行多长时间,您可以拥有多少后台活动/服务,服务超时和 ui 初始化。我们提高了这些价值。

4

2 回答 2

1

开发人员帮助防止其服务被终止的一种常见方法是使用持久通知(在通知栏中),这通常通过设置进行切换。因此,如果用户在系统终止服务时遇到问题,他们可以打开通知。

于 2012-04-14T16:53:32.017 回答
1

清单中是否有任何标志可以更改以防止服务被框架代码杀死?

不。

是否有任何方法可以在服务中覆盖,让您处理未捕获的异常,但仍然让服务线程返回等待状态以等待来自客户端的下一个请求?

不。

于 2012-04-14T23:48:31.190 回答