关于AsyncTask的onPostExcute方法是否会在Activity重建过程当中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处连接和本声明。
本文连接:https://blog.csdn.net/XG1057415595/article/details/86774575
假设下面一种状况:异步

当前Activity中持有一个fragment对象,且fragment中有一个AsyncTask异步任务正在执行,当配置发生改变时(好比屏幕旋转),假设消息队列的状况以下.net

1.配置改变,用户旋转屏幕,可是此时AsyncTask已经运行
2.Fragment的onDetach方法被调用
3.AsyncTask的doInBackground方法完成,也就是后台任务执行完毕
4.AsyncTask的onPostExecute方法被调用,在这个方法里对UI进行更改
5.这时Fragment的onAttach方法才被调用线程

问题就是在Fragment被onDetach时,恰巧异步任务AsyncTask执行完毕后,onPostExecute对UI进行更改,会发生什么?或是否会发生?对象

答案是:不会发生这种状况!blog

配置改变发生时(屏幕旋转等),在Fragment的onDetach和onAttach方法之间,onPostExecute方法不会被执行。生命周期

缘由以下:队列

1.配置改变会发送一个message到主线程的消息队列。消息队列

2.当doInBackground方法执行完成时,AsyncTask经过发送一个message到主线程的消息队列,以此来调用onPostExecute方法。it

3.配置改变时发送的message包含调用Activity和fragment生命周期方法的代码(如onDetach()和onAttach())。AsyncTask的message包含调用onPostExecute()方法的代码。由于主线程是顺序处理消息队列中的message的,因此不可能同时执行两个message,因此onPostExecute()方法永远不可能在onDetach()和onAttach()方法之间调用。后台

  ———————————————— 版权声明:本文为CSDN博主「_SkUnK」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处连接及本声明。 原文连接:https://blog.csdn.net/XG1057415595/article/details/86774575

相关文章
相关标签/搜索