android finish()方法不会从内存中清除应用程序

时间:2009-12-29 22:10:20

标签: android memory process android-activity lifecycle

我有一个活动,我调用了finish()方法,并且没有从内存中清除活动。

调用finish()后,我看到onDestroy()方法成功执行(我清除了所有变量和内容)。

它应该从内存中清除还是它的android如何工作?据我所知,活动的LifeCycle已经完成。

如果它将应用程序保留在内存中,以便在用户第二次使用它时运行得更快,我可以将哪些对象留在内存中以便重用?如果我理解正确,我想要清除onDestroy上的所有内容。

7 个答案:

答案 0 :(得分:33)

Android会在用户想要重新启动应用程序的情况下保持流程,这会使启动阶段更快。该过程将不会执行任何操作,如果需要回收内存,则该过程将被终止。别担心:)

答案 1 :(得分:26)

最好的方法是首先使用finish(),然后使用System.exit(0)清除静态变量。它会给你一些自由空间。

许多应用程序都离开了工作流程和变量,这让我很生气。使用内存30分钟后,我必须运行任务管理器 - Lvl 2清除内存

我的应用中已经尝试了3年以上的问题,这是不正确的。使用Exit()

后永远不会崩溃或重新启动

答案 2 :(得分:11)

尝试使用

System.exit(0);

答案 3 :(得分:6)

一旦onDestroy()被调用,你的活动就注定了。周期。

话虽这么说,分配给您的应用程序的进程(以及地址空间)可能仍然被您的应用程序的另一部分 - 另一个活动或服务使用。您的流程也可能是空的,操作系统还没有回收它;它不是即时的。

有关详细信息,请参阅流程生命周期文档:
http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle

无论如何,如果您的活动重新启动,它将必须再次完成整个启动序列,从onCreate()开始。不要认为可以隐式重复使用任何东西。

答案 4 :(得分:4)

如果你需要关闭子活动的申请,我可能会建议你这样做: 1)来自活动A调用活动B为startActivityForResult(intent,REQUEST_CODE);

Intent intent = new Intent()
            .setClass(ActivityA.this, ActivityB.class);
            startActivityForResult(intent, REQUEST_CODE);

2)在活动A中你应该添加方法:

protected void onActivityResult(int requestCode, int resultCode,
        Intent data) {
    if (requestCode == REQUEST_CODE) {
        if (resultCode == RESULT_CLOSE_APPLICATION) {
            this.finish();
        }
    }
}

3)在活动B中完成呼叫:

this.setResult(RESULT_CLOSE_APPLICATION);
this.finish();

答案 5 :(得分:1)

根据Google I / O 2008的this演示文稿,完成也会导致该进程被终止,但我写了一个快速的应用程序来测试这个,在Android 1.5上它确实不

正如Romain所说(顺便说一句,他是Android的UI工具包工程师),你的流程只会在那里无所事事,所以没什么可担心的。

答案 6 :(得分:1)

作为快速解决方案,您可以使用以下内容来杀死您的应用:

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

但我不建议将此用于商业应用,因为它违背了Android内存管理系统的工作方式。