Android UI线程消息队列调度顺序
虽然在Android中使用retain Fragments来保存configuration更改期间的AsyncTask,但我认为这是最好的方法,但在UI Thread的Message Queue调用顺序中却出现了一些疑问。
例如:想象一下这个场景:
- 发生configuration更改,用户旋转设备。 AsyncTask正在运行。
 - 片段
onDetach()被调用 -   AsyncTask 
doInBackground()方法结束 -  调用AsyncTask 
onPostExecute() -   
onAttach()上的片段被调用 
所以UI线程消息队列可以这样:
队列顶部 – > onDetach()| onPostExecute()| onAttach()
 我知道它不能,调用onPostExecute()将等待,直到configuration更改完成,据我所知,但这是如何工作的?  “活动”,“碎片”生命周期的调用是否连续执行? 
 在configuration更改期间, onPostExecute()不能在Fragment#onDetach()和Fragment#onAttach()之间调用。 这个说法背后的推理是三重的: 
- 
configuration更改在主线程的消息队列中的单个消息内处理。
 - 
只要
doInBackground()方法返回,AsyncTaskonPostExecute()通过在主线程的消息队列中发布消息来调度onPostExecute()方法。 - 
configuration更改的消息将包含将调用
Activity和Fragment生命周期方法(如onDetach()和onAttach())的代码。AsyncTask的消息将包含将调用onPostExecute()方法的代码。 由于主线程按顺序处理消息队列中的消息,因此两个消息不可能同时被执行,因此在调用onDetach()和onAttach()之间永远不能调用onAttach()。 
请阅读我对Doug Stevenson的回复,以获得更详细的解释(包括certificate索赔的源代码的链接)。