我有一个活动,我调用了 finish() 方法,并且该活动没有从内存中清除。
调用 finish() 后,我看到方法 onDestroy() 已成功执行(并且我清除了其中的所有变量和内容)。
应该从内存中清除它还是它是如何工作的?据我了解,活动的生命周期已经完成。
如果它将应用程序保留在内存中,以便用户第二次使用它时运行得更快,我可以将哪些对象留在内存中以重复使用?如果我理解正确,我想清除 onDestroy 上的所有内容。
我有一个活动,我调用了 finish() 方法,并且该活动没有从内存中清除。
调用 finish() 后,我看到方法 onDestroy() 已成功执行(并且我清除了其中的所有变量和内容)。
应该从内存中清除它还是它是如何工作的?据我了解,活动的生命周期已经完成。
如果它将应用程序保留在内存中,以便用户第二次使用它时运行得更快,我可以将哪些对象留在内存中以重复使用?如果我理解正确,我想清除 onDestroy 上的所有内容。
如果用户想要重新启动应用程序,Android 会保留进程,这使得启动阶段更快。该进程将不会做任何事情,如果需要回收内存,该进程将被终止。别担心 :)
最好的方法是先使用finish()
,然后使用System.exit(0)
清除静态变量。它会给你一些自由空间。
许多应用程序留下了让我生气的工作流程和变量。使用 30 分钟后内存已满,我必须运行任务管理器 - Lvl 2 清除内存
我在我的应用程序中尝试了超过 3 年的问题是不正确的。使用后永远不会崩溃或重新启动Exit()
尝试使用
System.exit(0);
一旦 onDestroy() 被调用,你的活动就注定了。时期。
话虽如此,分配给您的应用程序的进程(以及因此的地址空间)可能仍在由您的应用程序的另一部分使用 - 另一个活动或服务。您的进程也可能是空的,而操作系统还没有回收它;这不是即时的。
有关更多信息,请参阅流程生命周期文档:http:
//developer.android.com/reference/android/app/Activity.html#ProcessLifecycle
无论如何,如果您的 Activity 重新启动,它必须再次经历整个启动序列,从 onCreate() 开始。不要假设任何东西都可以隐式重用。
If you need to close application from subactivity, I may suggest you to made it in such a way: 1) from activity A call activity B as startActivityForResult(intent, REQUEST_CODE);
Intent intent = new Intent()
.setClass(ActivityA.this, ActivityB.class);
startActivityForResult(intent, REQUEST_CODE);
2) in activity A you should add method:
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == REQUEST_CODE) {
if (resultCode == RESULT_CLOSE_APPLICATION) {
this.finish();
}
}
}
3) in activity B call finish:
this.setResult(RESULT_CLOSE_APPLICATION);
this.finish();
作为快速修复,您可以使用以下方法杀死您的应用程序:
android.os.Process.killProcess(android.os.Process.myPid());
但我不建议将其用于商业应用程序,因为它违背了 Android 内存管理系统的工作方式。
根据Google I/O 2008的这个演示文稿,Finish 也应该导致进程被终止,但我编写了一个快速应用程序来测试这一点,而在 Android 1.5 上却没有。
正如 Romain 所说(顺便说一句,他是 Android 的 UI Toolkit 工程师),您的进程无论如何都会坐在那里无所事事,因此无需担心。