博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异步操作之深入了解
阅读量:6914 次
发布时间:2019-06-27

本文共 977 字,大约阅读时间需要 3 分钟。

    首先,先说一说AsyncTask<Void,Void,Void>三个泛型参数的对应问题。第一个参数对应的是doInBackground()里面的参数,如以

  doInBackground(Integer... parm)形式存在,而参数传入的地方是执行execute()的方法,如以execute(1000)形式存在,当然也可以

  是execute(1000,2000),因为parma形参可以看作为一个Integer的数组。第二个参数对应的是onProgressUpdate()里面的参数,形式如

  onProgressUpdate(Integer... parm)实际调用见下文红色处。第三个参数对应的是doInBackground方法的返回类型还有就是onPostExecute

  方法的参数类型,实际调用见下文蓝色处。

    然后,说说现在比较完整的异步操作的一个总体流程。

    A. 让处理时间较长的操作(网上下载,线程阻塞等)独立出来成为一个类

    B. 让这一个类继承AsynTask<Void,Void,Void>

    C. 当在UI线程里面生成异步操作的类的一个实例,然后调用execute方法启动新线程,当然这个方法可以携带参数(实参),此参数会被

     传递到doInBackground()方法里

    D. 然后程序会在异步操作中调用onPreExecute方法,此方法实际上是在UI线程中运行,所以在方法中能够操作UI界面的组件

    E. 跟着程序会在一步操作中调用doInBackground方法,此方法是在新开的线程中执行一些耗时的操作,因此是不能够访问

       UI界面的组件。不过此时我们可以从doInBackground方法中调用publicProgress方法通知异步操作的另一个方法

       onProgressUpdate去更新UI线程(此方法实际上是在UI线程中运行,所以在方法中能够操作UI界面的组件)

    F. 异步操作结束后程序会在异步操作中调用onPostExecute方法,此方法实际上是在UI线程中运行,所以在方法中能够操作

       UI界面的 组件。从doInBackground方法中返回的数值会被传入到此方法的参数中

 

***附加一个小例子: 

 

转载地址:http://bnacl.baihongyu.com/

你可能感兴趣的文章
jeesite快速开发平台(二)----环境搭建
查看>>
65.Express---express-session
查看>>
P4576 [CQOI2013]棋盘游戏
查看>>
bzoj4889: [Tjoi2017]不勤劳的图书管理员(树套树)
查看>>
静态库链接时的依赖关系和先后顺序
查看>>
jQuery页面元素操作之创建节点元素
查看>>
[HNOI2016]矿区
查看>>
[HEOI2013]SAO ——计数问题
查看>>
LeetCode 727. Minimum Window Subsequence
查看>>
栈三:栈的压入、弹出序列
查看>>
排序算法:七大排序算法的PHP实现
查看>>
【Perl】Path::File 目录的创建和删除
查看>>
加速cin的技巧
查看>>
HDU 6124 Euler theorem
查看>>
2017 ACM-ICPC 亚洲区(西安赛区)网络赛
查看>>
删除排序数组中的重复项的golang实现
查看>>
Nginx下安装PIP监控软件
查看>>
原生javascript操作class-元素查找-元素是否存在-添加class-移除class
查看>>
关于XIFF开发IM的一些想法
查看>>
web设计经验<五>国外设计师总结的7个找灵感实用方法
查看>>