我有一个应用程序,我怀疑可能会泄漏线程或其上下文。让我这么想的是,在关闭应用程序后,该过程仍在运行(可见的过程监控应用程序)。我已经删除了代码中的所有内容,直到从onCreate调用finish()。这个过程仍然存在,让我烦恼。
我已经读过(来自here)
空进程是指不包含任何活动应用程序组件的进程。保持这样一个过程的唯一原因是作为缓存来改善下次组件需要在其中运行时的启动时间。系统通常会杀死这些进程,以便在进程缓存和底层内核缓存之间平衡整个系统资源。
我如何知道我的流程是否仍然存在,因为循环引用或上下文泄漏或其他任何同样错误或仅仅是流程为空?
答案 0 :(得分:0)
你是如何关闭申请的?点击后退按钮或主页按钮不会关闭应用程序,它只是完成(或暂停)活动。您完全无法控制Android何时决定终止该进程并终止该应用程序。
答案 1 :(得分:0)
finish()实际上并没有杀死你的应用程序。在几乎每种情况下,它都与用户点击后退按钮完全相同。
ActivityManager.killBackgroundProcesses(yourPackageName)可能就是你要找的东西。
答案 2 :(得分:0)
您仍然看到该流程不会向您提供有关应用程序中对象引用是否存在的信息。没有什么魔法可以为你解答。
如果您担心,您应该检查您使用系统服务注册回调(AKA侦听器)的位置(如果有的话)。这是一个共同的根本原因。正确的模式是在onResume()中注册并在onPause()中注销。保证在您的应用暂停/恢复时会调用这些内容。
除非您有非常特殊的目的,否则请不要像上面建议的那样使用各种方法手动查杀您的流程。操作系统内置了内存管理功能。不要试图比操作系统更聪明。 android将应用程序工件(活动,服务等)保存在内存中,即使它们已经“完成”。这允许他们下次重新开始更快。如果它需要其他内存,它将从内存中删除未使用的进程。