相关疑难解决方法(0)

Android破坏活动,查杀进程

嗨,我想知道Android如何管理内存,我无法在任何地方找到准确的答案.假设我有一个应用程序在当前活动堆栈上有5个活动(4个被停止,1个被恢复),没有连接服务.我按下HOME按钮,以便停止所有活动.我启动了一些其他内存消耗应用程序,整体设备内存开始变低.问题是

......我的申请会怎样?

  1. 系统可以只销毁我的一个或一些活动来恢复内存吗?
  2. 系统会杀死我申请的整个过程吗?所有的活动都会被很好地摧毁吗?
  3. 当我完全杀死我的应用程序时会发生什么?它会从开始(如第一次开始)开始,还是会尝试将活动恢复到正常状态/如果是 - 它只是堆栈顶部的那个还是全部?

更新:

在提出这个问题之前,我已经看过几次Activity生命周期,但它没有我的问题的答案.我做了一些测试,我有一些答案.DDMS中的"停止过程"是测试的线索.

我没有测试问题1的答案,但正如指南所说:

如果某个活动暂停或停止,系统可以通过要求完成活动或仅删除其进程来从内存中删除活动.

似乎可以轻轻地销毁一个或多个活动(使用onDestroy方法)而不会终止进程.回到它们时,您将获得(onCreate + bundle).

问题2答案:

是.通常系统杀死整个过程,这意味着包括活动和静态字段在内的所有数据都被销毁.这样做不是很好 - 你不会为任何暂停/停止的活动获得onDestroy或finialize().这就是在onPause方法之前调用saveInstanceState()的原因.onPause基本上是你应该保存的最后一个方法,因为在这个方法之后你永远不会看到onStop或onDestroy.系统可以扼杀破坏所有物体的过程,无论它们持有什么以及它们正在做什么.

问题3答案:

当你回到被杀的应用程序时会发生什么?

  • 在Android 2.2之前 - 应用程序将从具有启动器活动的开始启动.
  • 从2.2开始 - 系统将恢复先前的应用程序状态.这是什么意思?这意味着将重新创建最后一个可见活动(onCreate + bundle).活动堆栈会发生什么?堆栈很好但是它上面的所有活动都已经死了.当您使用后退按钮返回时,每个都将被重新创建(onCreate + bundle).还有一件事:

通常,当用户从主屏幕重新选择该任务时,系统会在某些情况下清除任务(从根活动上方的堆栈中删除所有活动).通常,如果用户未访问任务一段时间(例如30分钟),则完成此操作.

结论?

  1. 不要认为处理活动轮换问题可以通过android解决:configChanges ="orientation".当你这样做时,你会得到许多你甚至都不知道的问题.
  2. 使用DDMS测试应用程序 - 停止进程按钮.看到这个
  3. 使用静态变量时要小心.不要认为当你在活动1中初始化它们时 - 你将在活动2中初始化它们.初始化全局静态的唯一安全的地方是Application类.
  4. 请记住,您可能永远不会看到onStop或onDestroy.关闭文件/数据库,在onPause中停止下载.当您希望应用程序在BG中执行某些操作时 - 请使用前台服务.

那将是它...希望我帮助我的essey :)

android android-activity

116
推荐指数
1
解决办法
5万
查看次数

标签 统计

android ×1

android-activity ×1