我有一个活动,我调用了finish()方法,并且没有从内存中清除活动。
调用finish()后,我看到onDestroy()方法成功执行(我清除了所有变量和内容)。
它应该从内存中清除还是它的android如何工作?据我所知,活动的LifeCycle已经完成。
如果它将应用程序保留在内存中,以便在用户第二次使用它时运行得更快,我可以将哪些对象留在内存中以便重用?如果我理解正确,我想要清除onDestroy上的所有内容。
答案 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内存管理系统的工作方式。