Android中常常会有一些操作比方网络请求,文件读写。数据库操作。比較耗时,我们须要将其放在非UI线程去处理。此时。我们须要处理任务前后UI的变化和交互。我们须要通过类似js中异步请求处理,这里总结我所了解到的,方便自己记忆。也方便别人的浏览。

  1. AsyncTask

new AysncTask().execute();

AsyncTask会依照流程运行在UI线程和一个耗时的任务线程。

(1) onPreExecute() 执行预处理,它执行于UI线程,能够为后台任务做一些准备工作,比方绘制一个进度条控件。

(2) doInBackground(Params...) 后台进程运行的详细计算在这里实现,doInBackground(Params...)是AsyncTask的关键。此方法必须重载。在这种方法内能够使用publishProgress(Progress...)改变当前的进度值。

(3)onProgressUpdate(Progress...) 执行于UI线程。假设在doInBackground(Params...) 中使用了publishProgress(Progress...)。就会触发这种方法。

在这里能够对进度条控件依据进度值做出详细的响应。

(4)onPostExecute(Result) 执行于UI线程,能够对后台任务的结果做出处理,结果就是doInBackground(Params...)的返回值。此方法也要常常重载,假设Result为null表明后台任务没有完毕(被取消或者出现异常)。

2. Handler

创建Handler时须要传Lopper,默认是UI线程的。

通过Handler发送消息(Message)到主线程或者Handler的线程,

3. Activity.runOnUiThread(Runnable)

Runnable就可以在UI线程运行

4. View.post(Runnable)

Runnable执行在UI线程

View.post(Runnable)方法。在post(Runnable action)方法里,View获得当前线程(即UI线程)的Handler。然后将action对象post到Handler里。在Handler里,它将传递过来的action对象包装成一个Message(Message的callback为action),然后将其投入UI线程的消息循环中。

在Handler再次处理该Message时,有一条分支(未解释的那条)就是为它所设。直接调用runnable的run方法。而此时,已经路由到UI线程里,因此。我们能够毫无顾虑的来更新UI。

全部的异步操作原理本质都是通过Handler

基本上就这几种方式。当然也可自己使用消息循环常见类似的任务处理机制。

csdn博客编辑器不好用,也不支持markdown。这个是从我个人博客搬过来的,欢迎光临个人独立博客。

原文地址:http://blog.isming.me/blog/2014/03/16/androidyi-bu-cao-zuo-zong-jie/ ,转载请注明出处。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Android异步操作总结的更多相关文章

  1. ANDROID学习之路 转

    版权声明:本文为 stormzhang 原创文章,可以随意转载,但必须在明确位置注明出处!!! 这篇博客背后的故事 一路走来很不容易,刚好知乎上被人邀请回答如何自学android编程, 就借这个机会在 ...

  2. Android 学习之路

    转载:http://stormzhang.com/android/2014/07/07/learn-android-from-rookie/ 这篇博客背后的故事 一路走来很不容易,刚好知乎上被人邀请回 ...

  3. Android学习参考

    收到一些朋友的微博私信,说能不能给Android新手们一些指导,我只能说指导谈不上,毕竟我也很多东西正在学习中,与此同时一大学同学准备转行Android,可以说是从头开始,那么我就姑且以一个过来人的身 ...

  4. Android学习之路

    Android基础 整理下个人认为新手们必须要掌握的知识点,顺便也会附带相应觉得不错的讲解博客地址. 两分钟彻底让你明白Android Activity生命周期(图文)! Activity实际开发中使 ...

  5. Android Configuration change引发的问题及解决方法(转)

    之前在学习Fragment和总结Android异步操作的时候会在很多blog中看到对Configuration Change的讨论,以前做的项目都是固定竖屏的,所以对横竖屏切换以及横竖屏切换对程序有什 ...

  6. Android Configuration change引发的问题及解决方法

    之前在学习Fragment和总结Android异步操作的时候会在很多blog中看到对Configuration Change的讨论,以前做的项目都是固定竖屏的,所以对横竖屏切换以及横竖屏切换对程序有什 ...

  7. Android自学绝佳资料

    本文转自stormzhang老师的博客:http://stormzhang.com/android/2014/07/07/learn-android-from-rookie 首先感谢stromzhan ...

  8. Android学习之路(转载)

    原文地址:http://stormzhang.github.io/android/2014/07/07/learn-android-from-rookie/ 硬件 电脑–推荐Mac 首先声明我不是果粉 ...

  9. android 总结

    两点说明:  1. 本文我的老大推荐给的, 我自己之前也写过自学的帖子, 现在看看感觉不是很完整, 故转载此篇 2. 本文最后附有<android讲义 第二版> 下载地址, 我个人认为最适 ...

随机推荐

  1. 在RHEL上安装Thrift(支持C++)的若干问题 » 编码无悔 / Intent & Focused

    在RHEL上安装Thrift(支持C++)的若干问题 » 编码无悔 / Intent & Focused [原创]在RHEL上安装Thrift(支持C++)的若干问题    2010年12月1 ...

  2. 你属于几K(千)?

    月薪2k.对出勤率负责:5k,对按时完毕率负责:8k,对质量负责:12k.对小团队的情绪负责:16k,对到款率负责:20k,要想着怎么保住自己的饭碗.40k.保住部门.100k.保住大部门:100k+ ...

  3. NGUI使用教程(3) 使用外部图片制作Atlas(图集)

    在实际操作之前有几个概念先弄清一下 Atlas:图集,把美术给你提供的素材,用 NGUI 的 Atlas Maker 工具.合成一张图片(准确的说,还同一时候生成了prefab.mat ). Spri ...

  4. 自动更改IP地址反爬虫封锁,支持多线程(转)

    8年多爬虫经验的人告诉你,国内ADSL是王道,多申请些线路,分布在多个不同的电信机房,能跨省跨市更好,我这里写好的断线重拨组件,你可以直接使用. ADSL拨号上网使用动态IP地址,每一次拨号得到的IP ...

  5. WPF换肤之六:酷炫的时区浏览小精灵

    原文:WPF换肤之六:酷炫的时区浏览小精灵 由于工作需要,经常要查看到不同地区的 当前时间,以前总是对照着时区表来进行加减运算,现在有了这个小工具以后,感觉省心了不少.下面是软件的截图: 效果图赏析 ...

  6. Cocos2d-x3.1 粒子效果演示样例

    这里把粒子的几种效果粘出来,以便以后使用 原文地址:http://blog.csdn.net/qqmcy/article/details/37511259 // // IntervalLayer.cp ...

  7. 用数组array代替CActiveRecord构建CArrayDataProvider

    当需要构建 GridView的时候: 常常用 CArrayDataProvider 或者 CActiveDataProvider 这是就需要一个CActiveRecord 比如:  857       ...

  8. hdu1513 (滚动数据压缩空间)

    给定一个字符串,问最少添加多少个字符可以使得这个字符串变成回文串 if(str[i]==str[j]) dp[i][j] = dp[i+1][j-1] else dp[i][j] = min(dp[i ...

  9. CheckBoxList的操作查询是否被选中设置或者得到

    在项目中我们可能会经常遇到一收集多选信息的情况,比如做注册的时候要收集个人爱好,那时候大家第一个想到的肯定是CheckBoxList.那我们怎么来获取到CheckBoxList的值并且存入数据库呢?? ...

  10. C#操作注册表--DarrenF

    步骤/方法 读取指定名称的注册表的值 private string GetRegistData(string name) { string registData; RegistryKey hkml = ...