android7.0 onDestroy()方法延迟执行

问题:android7.0 onDestroy()方法延迟执行
描述:Aactivity --> Bactivity,同时关闭A;当B中有大量内容加载时,A的生命周期中onDestroy()会延迟执行(最长10s),这个版本差异性怎么解决呢?

把B里面的内容扔到新开的线程里加载吧,延迟这么久确定不会anr?

你确定这个是Android7.0导致的?别的系统不会?

加载的内容放到onstart方法里或者是omresume。omcreate里面只放加载布局的操作

onstart,omresume,omcreate一样都是在主线程运行的,加载东西多的话还是新开线程吧

在活动a中启动活动b,在a不关闭情况下,方法调用顺序为:a调用onpause,b调用oncreate,b调用onstart,b调用onresume,a调用onstop。如果在打开b时候关闭a,则a的ondestory方法会在理想情况后最后执行(当手动调用finish方法时系统会将活动a从栈中移除,但可能延迟执行ondestroy)。
一般情况下如果a是否调用ondestroy对活动b加载数据没有影响,则不需要来管a什么时候释放了内存。同时在b中加载数据时候请放到单独的线程中,保证活动b启动时不会卡顿,在线程中加载数据时可以人为延时,保证活动a已经完全关闭

偶然发现还有一个遗漏的问题

这个问题其实是一个细节,在阿里Anroid开发手册中有提到

【推荐】不要在 Activity#onDestroy()内执行释放资源的工作,例如一些工作线程的销毁和停止,因为 onDestroy()执行的时机可能较晚。可根据实际需要,在Activity#onPause()/onStop()中结合 isFinishing()的判断来执行。 

手册在这指出Activity#onDestroy()在任何Android版本中执行的时机都可能比较晚

同时,需要提到Activity生命周期的另外一点,Activity#onPause()执行完成才会创建下一个Activity

笔记