Android中子线程与UI线程交互
来源:互联网 发布:软件开发心得体会 编辑:程序博客网 时间:2024/05/17 23:46
交互方式
1、handler2、Activity.runOnUIThread(Runnable)
3、View.Post(Runnable)
4、View.PostDelayed(Runnabe,long)
5、AsyncTask
Handler
一个线程只能运行一个消息环即一个Thread对应一个Looper,一个Looper对应一个Thread;
APP运行的时候,在main方法调用Looper.prepareMainLooper和Looper.loop方法,因此主线程自带Looper,不需要开发者二次创建,同时我们可以在Activity中直接创建Handler;
那如何在自定义的Thread创建属于该线程的Looper呢?只需在Thread的run方法内部调用Looper.prepare,接着再调用Looper.loop即可,然后接着创建Handler对象即完成创建Looper和Handler与Looper绑定;
looper与线程关联的时候,looper会同时生产一个messageQueue。他是一个消息队列,looper会不停的从messageQuee中取出消息,也就是message。然后线程就会根据message中的内容进行相应的操作;
在创建Message对象的时候推荐使用obtainMessage方法来获取一个Message;
Handler负责发送Message并处理该Message(handleMessage方法);
APP运行的时候,在main方法调用Looper.prepareMainLooper和Looper.loop方法,因此主线程自带Looper,不需要开发者二次创建,同时我们可以在Activity中直接创建Handler;
那如何在自定义的Thread创建属于该线程的Looper呢?只需在Thread的run方法内部调用Looper.prepare,接着再调用Looper.loop即可,然后接着创建Handler对象即完成创建Looper和Handler与Looper绑定;
looper与线程关联的时候,looper会同时生产一个messageQueue。他是一个消息队列,looper会不停的从messageQuee中取出消息,也就是message。然后线程就会根据message中的内容进行相应的操作;
在创建Message对象的时候推荐使用obtainMessage方法来获取一个Message;
Handler负责发送Message并处理该Message(handleMessage方法);
AsyncTask
这里分为3个阶段:准备、过程、结果;
准备阶段对应着Params参数,对应着onPreExecute方法;
过程阶段对应着Progress参数,对应着doInBackground、onProgressUpdate方法;
结果阶段对应着Result参数,对应着onPostExecute方法;
准备阶段对应着Params参数,对应着onPreExecute方法;
过程阶段对应着Progress参数,对应着doInBackground、onProgressUpdate方法;
结果阶段对应着Result参数,对应着onPostExecute方法;
onPreExecute运行在UI线程,主要目的是为后台线程的运行做准备。当他运行完成后,他会调用doInBackground方法。
doInBackground 运行在后台线程,他用来负责运行任务。他拥有参数Params,并且返回Result。在后台线程的运行当中,为了能够更新作业完成的进度,需要在 doInbackground方法中调用PublishProgress方法。该方法拥有参数Progress。通过该方法可以更新Progress的数 据。然后当调用完PublishProgress方法,他会调用onProgressUpdate方法用于更新进度。
onProgressUpdate运行在UI线程,主要目的是用来更新UI线程中显示进度的UI控件。他拥有Progress参数。在doInBackground中调用PublishProgress之后,就会自动调onProgressUpdate方法
onPostExecute运行在UI线程,当doInBackground方法运行完后,他会调用onPostExecute方法,并传入Result。在onPostExecute方法中,就可以将Result更新到UI控件上。
注意:AsyncTask实例只能执行一次
继承AsyncTask并在UI线程中创建实例,并调用execute方法,传入参数就可以了。
0 0
- Android中子线程与UI线程交互
- android UI线程与非UI线程交互(二)
- android UI线程与非Ui线程交互方法
- android中子线程操作UI的问题
- android中子线程访问UI组件
- 理解Android UI与线程交互
- Android中子线程和UI线程之间通信的方式(Handler与Thread-附源码)
- android之后台线程(UI与线程交互)
- android之后台线程(UI与线程交互)
- Android中后台线程如何与UI线程交互
- Android中后台线程如何与UI线程交互
- Android中UI线程与后台线程交互设计
- Android中UI线程与后台线程交互方法
- Android中后台线程如何与UI线程交互
- Android中UI线程与后台线程交互设计方法
- 后台线程与UI线程的交互
- IOS中子线程刷新UI
- android中子线程更新UI的方式浅析
- Android OTA升级(1):编译升级全包
- oneAPM 和 open-falcon系统指标采集简单对比
- 动态规划之背包问题(一):01背包问题
- OpenGL ES 纹理实践
- yii的增删改查
- Android中子线程与UI线程交互
- bzoj3446[Usaco2014 Feb]Cow Decathlon全能奶牛
- Spring整合Quartz实现定时任务调度
- 多列布局——column-width
- React入门教程第三课--gulp编译优化
- Codeforces Round #375 (Div. 2)
- Java语言中类与类之间的关系
- android代码配色
- Android OTA升级(2):开启升级过程