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

我有一个活动,我打电话给finish()方法,活动不会从内存中清除。

调用finish()之后,我发现onDestroy()方法成功执行(并清除了所有variables和内容)。

应该从内存中清除它还是Android的工作方式? 据我了解,活动的LifeCycle已经完成。

如果它将应用程序保存在内存中,那么用户第二次使用它时,我可以在内存中留下什么样的对象来重用? 如果我理解正确,我想要清除onDestroy上的所有内容。

Solutions Collecting From Web of "android finish()方法不会从内存中清除应用程序"

如果用户想要重新启动应用程序,Android会保留过程,这会使启动阶段更快。 这个过程不会做任何事情,如果内存需要回收,这个过程将被杀死。 不要担心:)

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

许多应用程序离开工作stream程和variables是什么让我生气。 使用内存已满30分钟后,我必须运行任务pipe理器 – Lvl 2清除内存

它不是真的,我在我的应用程序已经尝试了3年以上的cousing问题。 使用Exit()后不会崩溃或重新启动

尝试使用

System.exit(0);

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

话虽如此,分配给您的应用程序的过程(因此地址空间)可能仍然由另一部分应用程序使用 – 另一个活动或服务。 也有可能你的进程是空的,操作系统还没有开始回收它; 这不是即时的。

请参阅stream程生命周期文档以获取更多信息:
http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle

无论如何,如果您的活动重新启动,则必须从onCreate()开始再次执行整个启动顺序。 不要以为任何东西都可以被隐式重用。

如果你需要从子活动中closures应用程序,我可能会build议你这样做:1)从activityA调用activityA作为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(); 

作为一个快速修复,你可以使用下面的杀死你的应用程序:

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

但我不会推荐这个商业应用程序,因为它违背了Android内存pipe理系统的工作原理。

根据Google I / O 2008的演示,Finish也应该导致进程被终止,但是我写了一个快速的应用程序来testing这个,而在Android 1.5上它没有。

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