异步消息处理机制
来源:互联网 发布:恋爱循环的镜头数据 编辑:程序博客网 时间:2024/04/28 17:19
异步消息处理机制经常会被使用到,在Android中主要由四个部分组成:Message、Handler、MessageQueue、Looper,下面解释一下各个部分代表的含义
1、Message
用于在线程之间传递消息,可以在内部携带少量的信息,用于在不同线程之间交换数据,可以使用what、arg1、obj字段携带信息
2、Handler
用于发送和处理消息,发送是利用handler中的sendMessage()方法,而处理的方法为handleMessage()方法
3、MessageQueue
指的是消息队列 的意思,主要用于存放所有通过Handler发送的消息都会存在消息队列当中,等待被处理,每个线程只有一个MessageQueue对象
4、Looper
相当于MessageQueue的管家,调用Looper的loop()方法之后,就会进入一个无限循环中,只要发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler中的处理方法去处理,每个线程中也只有一个Looper对象
将上面四个部分连接起来构成的一个机制就是,将带有Message字段的信息通过Handler发送出去,存放在MessageQueue队列当中,然后由Looper检测到后,就会被传递到Handler中去处理,这就是异步消息处理机制的原理
下面介绍通过上面的异步消息处理机制做成封装的一个工具AsyncTask,他的基本用法就是创建一个子类去继承它并重写对应的方法,继承的时候会指定三个参数,这三个参数的作用分别如下所示:
1、Params:在执行AsyncTask的时候需要出入的参数,可用于后台任务中使用,没必要的时候可以使用Void类型即可
2、Progress:后台任务执行时候的进度,通常我们显示为23%的形式,所以可以使用Integer类型
3、Result:后台任务执行完毕时返回的类型,通常我们使用Boolean类型来表示任务执行的成功或失败
注意:初次之外我们启动AsyncTask的方法是,创建继承AsyncTask的类的对象,并调用execute()方法即可启动
下面贴上代码例子:
class DownService extends AsyncTask<Void ,Integer ,Boolean>{ //后台任务开始之前被调用 @Override protected void onPreExecute() { Log.i("information","onpreExecute()"); } @Override protected Boolean doInBackground(Void... params) { //这个方法里面的所有代码都是在子线程中运行的 Log.i("information","doInBackground()"); publishProgress(100); return true; } //刷新进度 @Override protected void onProgressUpdate(Integer... values) { Log.i("information","onProgressUpdate()"); } //任务执行完毕的时候被调用 @Override protected void onPostExecute(Boolean aBoolean) { if(aBoolean){ Log.i("information","onPostExecute()成功"); }else{ Log.i("information","onPostExecute()失败"); } }}启动的方法
new DownService().execute();
- 异步消息处理机制
- 异步消息处理机制
- 异步消息处理机制
- 异步消息处理机制
- 异步消息处理机制
- Android异步消息处理机制
- Android异步消息处理机制
- Android异步消息处理机制
- 解析异步消息处理机制
- android异步消息处理机制
- Handler--异步消息处理机制
- Android异步消息处理机制
- AsyncTask异步消息处理机制
- android异步消息处理机制
- AsyncTask 异步消息处理机制
- Android异步消息处理机制
- 解析异步消息处理机制
- 解析异步消息处理机制
- 从事Android开发新人的第一篇博文
- Axios(JS HTTP库/Ajax库)
- NTP服务同步时间
- const,constexpr与指针,常量表达式
- 找出数组中重复次数最多的元素
- 异步消息处理机制
- iso7层模型
- Swift和Objective-C如何兼顾?且看@objc和Dynamic,dynamic关键字
- 产品与运营之社区运营
- 微软开源分布式高性能GB框架LightGBM安装使用
- C#使用Newtonsoft序列化、反序列化
- UE4单向链表的使用
- 一个小链接,listview中嵌套EditText
- 自定义选择对话框——圆角背景,自动适配各种机型,可以显示单个按钮或两个按钮