有人可能会把我推向一些具体的,值得信赖的(最好是简明的)有关以下内容的信息:
系统重新创建组件的顺序和(如适用) (片段,活动,活动的线程/ AsyncTasks /定时器, 静态数据(何时卸载类?),其他类中的Threads / AsyncTasks / Timers,host TabActivity,ActivityGroup,绑定本地服务,应用程序,进程) 当应用程序在后台和前台时 破坏可以在哪些点停止(可以遇到什么状态 返回应用程序时 - 比如“包括Application对象在内的所有东西 被毁坏,过程活着“?
是否有可能(不修改Android)以编程方式导致同样的破坏 我们自己,以便它与系统何时进行区分,或者当我们自己选择释放内存时需要一个单独的机制(由onLowMemory触发)?
1)所有场景的可靠复制步骤(junit.framework会这样做吗?我还没有调查过)?
“If the user leaves a task for a long time, the system clears the task of all activities except the root activity. When the user returns to the task again, only the root activity is restored”:这是否与流程/组件生命周期/销毁有关,还是与之相关?
我已阅读各种来源提供信息,通常是不完整和误导,有时是不正确的
我承认,我已经浏览了文档的某些部分,所以我可能错过了或误解了一些东西
[编辑]为了避免误解:我要问的是Android销毁组件以释放内存,绕过 Activity.onDestroy。
当我将应用程序放在后台并稍后返回时,将会出现以下序列之一:
[EDIT2] 赏金开始了。需要可靠的信息:活动,碎片,应用程序,绑定(可能是远程)服务,流程 部分/完全销毁方案。见第1点。
答案 0 :(得分:2)
归功于此hackbod用于撰写here(阅读完整答案),并CommonsWare用于链接评论。
简而言之:所有docs,经过多次重写,继续骗我们。他们没有误导,他们只是给我们不真实的信息。除非你正在使用Fragments(dunno,如果支持v4也计算),Android会通过终止整个过程来释放内存,或者什么都不做。
当然,这并不能解决所有问题:
答案 1 :(得分:1)
这就是我的经验,以及我所提出的开发者的经验,似乎暗示:
以上包括一些假设
我还在等待有人确认并提供一些文档(保证不依赖于当前的类实现)
如果有任何错误,请纠正我
编辑:以上信息可能已过时,已在Android 2.1-2.3上进行了测试
答案 2 :(得分:0)
这不是一个完整的答案,但我建议您在每种方法中放置Toast消息。添加您自己的onPause()
,onStop()
,onResume()
等,并在里面加上这样的一行:
Toast.makeText(this, "onPause()", Toast.LENGTH_SHORT).show();
您不能直接调用这些方法,但是将另一个活动移动到堆栈顶部会导致调用现有活动上的这些方法。还要记住的另一件事是每次开始活动时都不需要调用onCreate()
。这实际上取决于您如何开始活动,例如,如果您发送此意图
Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP);
如果已经创建,则会显示调用onNewIntent()
。总而言之,最好的事情就是观看Toast消息。您还需要专注于使用调试器。在每个方法上放置一个断点,你可以看到它。我确信的一件事是你不能直接调用像onPause()
这样的方法。另请注意,一般情况下,您不知道何时调用onDestroy()
。
答案 3 :(得分:0)
好吧,我的朋友, 我猜你的研究会遇到很多麻烦。基本上是因为你在谈论两个黑盒子:Dalvik垃圾收集器和android堆管理器。我会说你不能相信android会遵循任何对象破坏的顺序。但是,你可以相信这个生命周期将被遵循[Programming Android,2011]:
活动生命周期:
onCreate() - Called after the instance of the activity has been created for the first time
onRestart() - Called after an activity has been interrupted, just before the onStart();
onStart() - Called when the object activity and their visions become visible to the user;
onResume()- Called when the object activity and their visions become interactive to the user;
onPause() - Called when a different instance of the activity is going to get visible and the present activity ceases to interact with the user
onStop() - Called when the activity is no longer visible or is not interacting
onDestroy() - Called when an activity instance must be destroyed and it's no longer needed.
片段具有不同的生命周期,包括onAttach,onCreateView和onActivityCreated方法。 但是,为什么你关心对象的破坏顺序?我看不出你有没有理由监控这些事件,但如果你真的需要,请了解更多有关垃圾收集器的信息。
答案 4 :(得分:0)
答案 5 :(得分:0)
当涉及到活动时,它们将仅在Destroy()上销毁,直到开发人员手动调用finish()函数,
片段生命周期与其父活动完全匹配,因此当父活动在Destroy()上销毁时,Destroy()上的片段也将被调用。
计时器任务将完成他们的工作并成为垃圾收集的候选者,一旦活动创建它们,任务在其自己的线程中运行,与活动无关,即使活动被销毁,任务也会自行完成.... / p>