Android:为什么我的进程在应用程序崩溃后仍然存活?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android:为什么我的进程在应用程序崩溃后仍然存活?相关的知识,希望对你有一定的参考价值。

我有一个应用程序,我故意扔一个RuntimeException在某一点崩溃。结果是应用程序崩溃,活动的所有可见痕迹都消失,并向用户显示一个弹出对话框:

应用已停止 [X]关闭应用程序

到目前为止一切顺利,所有这一切都是可以预期的。

但是,我能够通过在崩溃之前和之后调用adb shell ps | grep <packageName>来观察我的进程实际上在这次崩溃中幸存下来。 (只有当用户点击“关闭应用”时,才会终止此过程。)

  • 这个过程保持活力有什么意义?这个过程处于什么状态?它需要什么资源,哪些信息仍保留在内存中?

PS。我知道在没有进程存活的情况下强制终止应用程序的不同可能性(例如System.exit()android.os.Process.killProcess())但这不是问题 - 我真的更感兴趣的是为什么进程在应用程序崩溃中幸存。


我的问题的背景是应用程序强化和根/篡改/调试器检测。在某些情况下,从安全/强化的角度来看(即为潜在的攻击者提供更难的逆向工程),可能需要尽可能快速,干净地杀死应用程序。我完全清楚Android并不是为了给应用程序提供这种控制,而且通常不应该尝试终止应用程序。

答案

Android在崩溃后保持活动一段时间的原因正好与你的目标相反:)它需要收集一些调试信息并使其可供应用创建者使用。

您可以直接从代码中删除您的进程:

android.os.Process.killProcess(android.os.Process.myPid());

以上是关于Android:为什么我的进程在应用程序崩溃后仍然存活?的主要内容,如果未能解决你的问题,请参考以下文章

在Android工作室中没有错误,应用程序仍然在打开时崩溃

在我的华为手机上调试时,Android Studio 调试器在断点处崩溃/停止

应用程序没有向用户显示任何可见的崩溃,但 android vitals 仍然给我 Firebase 的崩溃报告

android camera intent 在某些手机上崩溃应用程序(约 20%)

RenderScript在Android 6上崩溃

符号化 iPad 崩溃日志后,回溯仍然不可读