1

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

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

到目前为止一切顺利,这一切都在意料之中。

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

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

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


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

4

1 回答 1

1

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

您可以直接从代码中终止您的进程:

android.os.Process.killProcess(android.os.Process.myPid());
于 2018-02-28T11:06:21.743 回答