android中handler简单用法,之前只是复制粘贴的使用,不明白原理,现在补上!
来源:互联网 发布:高三睡不好 知乎 编辑:程序博客网 时间:2024/06/05 15:29
在消息处理机制中,消息都是存放在一个消息队列中去,而应用程序的主线程就是围绕这个消息队列进入一个无限循环的,直到应用程序退出。如果队列中有消息,应用程序的主线程就会把它取出来,并分发给相应的Handler进行处理;如果队列中没有消息,应用程序的主线程就会进入空闲等待状态,等待下一个消息的到来。在Android应用程序中,这个消息循环过程是由Looper类来实现的,它定义在
frameworks/base/core/java/android/os/Looper.java文件中。
先理解几个概念:
Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。
Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。
MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等待Looper的抽取。
Looper:消息泵,不断地从MessageQueue中抽取Message执行。因此,一个MessageQueue需要一个Looper。
Thread:线程,负责调度整个消息循环,即消息循环的执行场所。
1、在Activity中需要声明一个Handler,并在onCreate()方法中初始化。代码如下:
static Handler handler;...@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } // 处理消息 handler = new Handler() { public void handleMessage(android.os.Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: //处理what=1的消息 break; case 1: //处理what=2的消息 break; default: break; } } };}
handlerMessage方法的作用就是从消息队列中读取消息并根据消息的不同内容做相应的处理
2、你需要一个线程,用来做耗时的工作,并发送消息。线程的代码如下:
private class WifiThread implements Runnable { @Override public void run() { //do something Message msg = Message.obtain(); msg.what = 1; handler.sendMessage(msg);}
线程重写的run()方法中,首先要从新建一个消息,然后初始化消息,也就是将信息写入到消息中,然后就是发送消息。
3、在Activity中启动线程
new WifiThread().run()
4.done
实际上,每一个线程都有一个Looper对象和一个消息队列,Looper将循环的检测消息队列并从中取出消息。handler的默认初始化函数中将handler对象与这个Looper绑定,这样就能通过handler这个对象向消息队列中发送和接受消息,就是这么简单。当然,handler还有一个post()方法族,可以将runnable对象加入到消息队列中,这里就不多做介绍了。
阅读全文
0 0
- android中handler简单用法,之前只是复制粘贴的使用,不明白原理,现在补上!
- android中使用Clip复制粘贴
- android中Handler简单用法
- android中handler简单用法
- android中handler简单用法
- Android 复制 粘贴 剪贴板的使用 ClipboardManager
- js 中复制粘贴的使用
- android 中 Handler 的简单使用
- android中handler的简单使用
- Android Handler 的简单用法
- android的复制粘贴
- android --相机调用方式(简单的转载复制粘贴)
- typedef的用法中不明白的地方
- Android中handler的用法
- android中Handler的用法
- Android中Handler的用法
- Android中handler的使用及原理---学习笔记
- Android中handler的使用及原理---学习笔记
- Oracle连接配置文件 tnsnames
- SQL优化
- 1029. 旧键盘(20)
- 1042. 字符统计(20)
- ajax删除成功后局部刷新
- android中handler简单用法,之前只是复制粘贴的使用,不明白原理,现在补上!
- ionic emulate ios/android 时 error cannot read property replace of undefined
- Fast RCNN
- JavaWeb第二章HTML与CSS网页06
- codecs常见用法
- 基于Electron的桌面应用开发
- android 分析method profiling
- 单例模式详解
- windows下python安装easy_install和pip