文档章节

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

shzwork
 shzwork
发布于 10/16 01:09
字数 552
阅读 12
收藏 0

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

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

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

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

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

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

原因如下:

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

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

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

本文转载自:https://blog.csdn.net/XG1057415595/article/details/86774575

shzwork

shzwork

粉丝 15
博文 864
码字总数 18401
作品 0
厦门
私信 提问
Android AsyncTask 简明用法

AsyncTask 是 Android 提供的一种异步任务处理类,它与线程类 Thread 相比,有以下优势: 1.preExcute() & postExcute()方法不仅可以进行预处理 & 收尾工作,而且它们归属于 UI 线程,所以你...

JavaGG
2011/12/14
5K
4
Android开发——实现子线程更新UI

Android中线程按功能分的话,可以分为两个,一个是主线程(UI线程),其他的都是子线程 主线程不能执行那些耗时过长的代码或任务(执行耗时过长的代码会出现应用未响应的提示),所以都是使用...

Stars-one
10/13
0
0
FragmentTransaction&Activity的状态

个人翻译的国外大牛博客 原文链接 自从Android Honeycomb发布以来,下面的异常信息和trace已经在StackOverflow提出了很多了: java.lang.IllegalStateException: Can not perform this acti...

iuKa
2014/07/04
3.5K
0
Android多线程之AsyncTask源码解析

AsyncTask 是一个较为轻量级的异步任务类,在底层通过封装 ThreadPool 和 Handler ,实现了线程的复用,后台任务执行顺序的控制、子线程和 UI 线程的切换,使得开发者可以以简单的方法来执行...

叶应是叶
2018/06/24
0
0
Android 异步加载解决方案

Android的Lazy Load主要体现在网络数据(图片)异步加载、数据库查询、复杂业务逻辑处理以及费时任务操作导致的异步处理等方面。在介绍Android开发过程中,异步处理这个常见的技术问题之前,...

Pandora
2012/08/14
2.3K
1

没有更多内容

加载失败,请刷新页面

加载更多

Vue.js学习笔记2 - better-scroll滚动条

better-scroll滚动条 使用作者自制的better-scroll库,实现内容的滚动。 先在package.json加上依赖: "better-scroll": "^0.1.7" 接着再npm install安装依赖。 import BScroll from 'better-......

swanf
今天
7
0
设计模式之适配器模式

定义 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工 作。 UML类图 适配器分为两种,类适配器与对象适配器。 类适配器的UML图...

陈年之后是青葱
今天
8
0
教你玩转Linux—磁盘管理

导读 Linux磁盘管理好坏直接关系到整个系统的性能问题,Linux磁盘管理常用三个命令为df、du和fdisk。 df df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了...

问题终结者
今天
13
0
KMP

字符串匹配算法 针对被匹配字段生产一个部分匹配表 A B C D A B D 0 0 0 0 1 2 0 部分匹配表 熟悉前缀与后缀的概念 ,“部分匹配表” 的生产就是根据前缀、后缀的最苍的共有元素的长度 前缀:...

鬼才王
昨天
6
0
快速搭建Jenkins集群

关于Jenkins集群 在Jenkins上同时执行多个任务时,单机性能可能达到瓶颈,使用Jenkins集群可以有效的解决此问题,让多台机器同时处理这些任务可以将压力分散,对单机版Jenkins的单点故障的隐...

程序员欣宸
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部