Android解析异步消息处理机制,Handler原理(第二行代码 10.2.3)
来源:互联网 发布:数据统计表 编辑:程序博客网 时间:2024/05/06 22:55
android中的异步消息处理机制分为四个部分
1、Message(线程间传递信息,可携带少量信息,如what还可携带obj对象 arg1 arg2)
2、Handler(译为:处理者 用于发送消息Handler.sendMessage 和处理消息handlerMessage,)
3、MessageQueue(消息队列,即存放消息的地方(handler发送的所有表消息在这里等待被处理),每个线程只有一个MessageQueue对象)
4、Looper(loop(循环),looper暂译循环者,负责管理MessageQueue,调用它的loop方法将无线循环MessageQueue中的消息并取出传递给Handler的handlerMessage()中,每个线程只有一个Lopper对象)
Handler的使用如下(这里是一个更新imageview的例子)
private Handler handler =new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case UPDATE_IMAGE: img.setImageResource(R.mipmap.avatar_def); break; } } };
在主线程声明一个Handler对象,并重写handlerMessage方法
new Thread(new Runnable() { @Override public void run() { Message message =new Message(); message.what=UPDATE_IMAGE; handler.sendMessage(message); } }).start();
通过new Thread方法创建一个子线程
在子线程中创建Message 对象并给Message对象的what字段赋值(这里也可以是obj对象),然后通过handler发送message对象,至此发送到MessageQueue中,looper会无线循环取消息将它取出来,回调dispathchMessage()方法将消息分发回handlerMessage方法中去处理,handlerMessage是在主线程中执行的,而发送消息是在子线程中进行。
AsyncTask(异步任务)
AsyncTask(方便在子线程中对UI进行操作,原理也是基于异步消息处理机制的)
class DownAsyncTask extends AsyncTask<void,Integer,Boolean>{ @Override protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean); } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); } @Override protected Boolean doInBackground(Void... voids) { return null; } @Override protected void onPreExecute() { super.onPreExecute(); } }
传入三个泛型 第一个void代表执行AsyncTask时不需要传入任何参数给后台任务,第二个Integer代表进度显示单位,第三个Boolean反馈执行结果
重写AsyncTask的方法
1、onPreExecute(后台任务开始执行之前调用,用于界面上的初始化操作,比如显示进度条等等)
2、doInBackground(这个方法的所有代码在子线程中执行,在这里处理耗时操作,一旦完成即可通过return 返回执行结果,不可进行UI操作,如果需要更新UI,比如说反馈当前进度,可以调用publishProgress(Progress…)方法来完成)
3、onProgressUpdate(在后台任务调用了publishProgress(Progress…)方法后这个方法就会很快被调用,该方法中的参数就是后台传过来的,可在这个方法进行UI操作,利用参数的值进行界面的更新)
4、onPostExecute(后台任务执行完毕,通过return语句进行返回时,这个方法就很快被调用.返回的数据会作为参数传递到此方法中去,可以利用返回的数据进行UI操作,比如提醒结果或关闭进度条)
简单来说就是在doInBackground方法中去执行具体耗时任务,比如说网络请求数据,在onProgressUpdate方法中进行UI操作,在onPostExecute方法中执行一些任务的收尾操作; 执行任务只需 new DownAsyncTask().execute;
- Android解析异步消息处理机制,Handler原理(第二行代码 10.2.3)
- 异步消息处理机制-Android中Handler原理(续)
- Android之handler异步消息处理机制原理
- Android异步消息处理机制Handler完全解析
- Handler:Android异步消息处理机制完全解析
- Android异步消息处理机制完全解析-Handler详解
- Android Handler 异步消息处理机制 《第一行代码》
- 解析异步消息处理机制(Handler)
- 异步消息处理机制Handler源码解析
- Android异步消息处理机制 handler
- Android Handler 异步消息处理机制
- 关于 Android 异步消息处理机制 Handler
- Android异步消息处理机制Handler
- Android基础:异步消息处理机制Handler
- android消息机制 - Handler、Looper原理解析
- Android中Handler消息处理机制原理
- 解析Android消息处理机制:Handler…
- Handler--异步消息处理机制
- android 图片开源库Universal-Image-Loader简单使用
- Node.js知识点详解(一)基础部分
- RabbitMQ与AMQP协议
- 学习设计模式(8)——单例模式2
- libsvm学习笔记-参数设置
- Android解析异步消息处理机制,Handler原理(第二行代码 10.2.3)
- A股-指标-boll线全面解析
- Node.js知识点详解(二)HTTP模块与事件模块
- 算法提高 矩阵乘法 区间DP
- 原声JS放大镜
- java web常用jar包的作用
- Java面试题之Java基础(转)
- Nginx 主要应用场景
- ACM 粗心永远AC不了系列——HDU 1097 A hard puzzle