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

Dan*_*ykt 26 memory lifecycle android process android-activity

我有一个活动,我调用finish()方法,活动不会从内存中清除.

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

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

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

Rom*_*Guy 33

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


小智 27

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

许多应用程序留下了令我生气的工作流程和变量.使用内存30分钟后,我必须运行任务管理器 - Lvl 2清除内存

我的应用程序中已经尝试了3年以上的问题,这是不正确的.使用后永远不会崩溃或重新启动Exit()

  • 这对我也有用.我有一种情况,我按下后退按钮退出应用程序,按照正常行为,它留下了记忆.下次我开始时,内存刚刚累积,如果我这样做了大约五次,我就用完了堆(测试设备上有24MB).完成()单独没有完成这项工作.我怀疑我使用Splash活动让用户知道我们会在那里可能以某种方式阻止内存在退出时被回收.使用这样一个粗糙的工具似乎不太熟练,但是当你关闭应用程序时,有什么区别? (2认同)
  • 我的游戏应用程序在初始运行时使用225MB.使用完()并重新启动后,它第二次使用400MB,运行速度明显变慢(我的三星Galaxy Tab S2有524M堆).在其他较少堆积的设备上,它只会在第二次运行时因"内存不足"错误而崩溃.在'finish()之后使用'System.exit(0)'似乎可以解决这个问题.我注意到'finish()'没有立即停止代码运行,因为在'finish()'之后放置'仍然达到'System.exit(0)'.但是,'System.exit(0)'确实会停止在其行上运行的代码. (2认同)
  • 在三星 Android 5.1.1 下,当用户触发 `onBackPressed()`,调用 `finish()`,调用 `onDestroy()`,调用 `super.onDestroy()` 作为它的第一个时,我的应用程序可靠地崩溃了 OOM步。`super.onDestroy()` 没有停止应用程序;它继续运行,如果用户从任务管理器重新启动它,它会通过 `onCreate()` 来释放资源,尝试分配一个它已经在使用的位图结构。**`System.exit(0)` 是我为此找到的唯一解决方案**。这不是记录在案的方法,但也许它正在解决操作系统的问题。 (2认同)

小智 11

尝试使用

System.exit(0);


Tre*_*hns 6

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

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

有关详细信息,请参阅Process Lifecycle文档:http:
//developer.android.com/reference/android/app/Activity.html#ProcessLifecycle

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