Ser*_*rra 61 android android-asynctask
使用Android中的retain Fragments在配置更改期间保存AsyncTask时,我认为这是最好的方法,我脑海中出现了一些关于UI Thread的Message Queue调用顺序的疑问.
例如:想象一下这种情况:
onDetach()被称为doInBackground()方法完成onPostExecute()调用AsyncTaskonAttach()被称为UI线程消息队列也可以这样:
队列顶部 - > onDetach()| onPostExecute()| onAttach()
我知道它不能,调用onPostExecute()将等到配置更改完成,据我所知,但这是如何工作的?来自活动,碎片生命周期的调用是否连续执行?
Ale*_*ood 119
这是不可能的onPostExecute()之间被称为中Fragment#onDetach()和Fragment#onAttach()一个结构变更时.这种说法背后的原因有三个:
配置更改在主线程的消息队列中的单个消息内处理.
一旦该doInBackground()方法返回,就通过将消息发布到主线程的消息队列来AsyncTask调度onPostExecute()要在主线程上调用的方法.
配置改变的消息将包含将调用的代码Activity和Fragment生命周期方法(如onDetach()和onAttach()).该AsyncTask消息将包含将调用该onPostExecute()方法的代码.由于主线程在它的消息队列顺序处理的消息,这是不可能的,以同时执行的两条消息,因此onPostExecute()该呼叫之间可以永远不会被调用中onDetach()和onAttach().
请阅读我在此主题中对Doug Stevenson的回复,以获得更详细的解释(包括证明声明的源代码的链接).