我不清楚当某项活动被销毁时的情况是什么?#34;通过操作系统。
让我在这里的活动生命周期图中解释原因:http://developer.android.com/reference/android/app/Activity.html
有一个箭头直接从onStop()转到' App进程已被杀死'然后来自“应用程序”流程的箭头被杀死了#39;到OnCreate()。
因此,该图表明,如果由于内存限制等操作系统杀死活动,则不会调用onDestroy()。
然而,在生命周期的描述中," destroy"被使用了很多次。例如,此页面中的以下引用:http://developer.android.com/training/basics/activity-lifecycle/recreating.html
如果系统当前已停止,系统也可能会破坏您的活动 并且还没有在很长一段时间或前台活动中使用过 需要更多资源,因此系统必须关闭后台 恢复记忆的过程。
因此文档说该活动在图表中被销毁,箭头从onStop()转到onCreate()并绕过onDestroy()。这就是为什么我感到困惑,因为它显然是一个矛盾。
如果我有一个在onCreate()方法中创建一些对象的活动,并且我在onDestroy()中将它们设置为null,但是如果应用程序从onStop()移动到onCreate()然后赢了&#,则不会调用onDestroy() 39;我有内存泄漏,因为它们将在onCreate()中再次创建?
我无法在onStop()中将它们设置为null,因为如果生命周期从onStop()移动到onRestart()到onStart(),它们将为null。
因此,为了处理生命周期图中的所有路径,如何处理在活动中创建和销毁子对象的正确顺序? 在onCreate()中是否有必要仅在它们为null时才创建对象而不是其他?
答案 0 :(得分:3)
因此,该图表明,如果由于内存限制等操作系统杀死活动,则不会调用onDestroy()。
有问题的箭头标有"优先级较高的应用程序需要内存"。因此,此图表显示the OS terminates the process未调用onDestroy()
,因为具有较高优先级的应用程序需要内存。在其他情况下,Android会更轻柔地终止应用程序的处理,在这种情况下,Android会花时间为您的活动致电onDestroy()
。在其他方案中也会调用onDestroy()
,例如finish()
,BACK按钮的默认行为,配置更改的默认行为等。
如果我有一个在onCreate()方法中创建一些对象的活动,并且我在onDestroy()中将它们设置为null,但是如果应用程序从onStop()移动到onCreate()然后赢了&#,则不会调用onDestroy() 39;我有内存泄漏,因为它们将在onCreate()中再次创建?
不,因为整个过程已经终止"如果应用从onStop()
移动到onCreate()
"。 Android does not destroy individual activities due to low memory conditions,尽管文件中有一些相反的陈述。
因此,为了处理生命周期图中的所有路径,如何处理在活动中创建和销毁子对象的正确顺序?
应该在onStop()
之前或之前清理很多事情。具体而言,您应该考虑在onPause()
或onStop()
进行清理时,您执行的任何操作可能会导致用户后悔安装您的应用,例如请求GPS修复。
对于那些你确定应该在onDestroy()
中清理的东西,请执行此操作。 AFAIK,只有三种可能性:
您可以通过onDestroy()
致电,并可以进行清理工作
您的流程已终止,在这种情况下,您的清理工作不再需要或可能
你因未处理的异常而崩溃,在这种情况下,Android无法保证再调用生命周期方法(这个故事的道德:使用优秀的异常处理程序)