Study-android 的handler和message学习
来源:互联网 发布:安卓软件限速 编辑:程序博客网 时间:2024/05/21 14:57
主要看代码:
/** * * 关于handler、message、MessageQueue、looper * 1、一个线程Thread只有一个Looper,这个Looper不是默认有的,需要通过调用Looper.prepare(); * 和Looper.loop();启动和初始化,Activity默认是有一个Looper,所以不需要调用prepare和loop * * 2、handler会绑定一个线程,在那个线程里面实例化则绑定那个线程,handler是用来发送和接受消息的 * handler可以发送和接受多个消息,Looper是管理handler message机制的 * * 3、message是通过handler来操作的,可以handler主动来发送,也可以是message设置handler来发送 * 获取message的最好办法是Message.obtain()或者Handler.obtainMessage() * * 4、post和sendMessage 在handler里面覆盖sendMessage方法来处理message * post里面的runable是跟handler实现的位置是同一个线程 * * @author WangYD * @time 2015年8月6日 * */public class HandlerActivity extends Activity implements OnClickListener {private static final String TAG = "HandlerActivity";private Button btn1 = null;private Button btn2 = null;/** * 这个handler是在main里面实例化,所以这个是被main线程的Looper管理,可以处理从子线程里由这个handler发送的消息 * 如果handler是在子线程里面实例化(可以在main里面声明),则这个handler是由子线程的Looper管理, * 可以处理从main线程里由这个handler发送的消息main里面的Looper是系统自动产生的, * 但是子线程的Looper需要通过调用Looper.prepare()和Looper.loop()来产生初始化Looper */@SuppressLint("HandlerLeak")private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {DBG.log(TAG, "main:" + msg.obj.toString());}};/** 这个在子线程里面实例化 */private Handler handler2 = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_handler);btn1 = (Button) findViewById(R.id.a_button1);btn2 = (Button) findViewById(R.id.a_button2);btn1.setOnClickListener(this);btn2.setOnClickListener(this);new Thread() {@SuppressLint("HandlerLeak")public void run() {Looper.prepare();handler2 = new Handler() {@Overridepublic void handleMessage(Message msg) {DBG.log(TAG, "thread:" + msg.obj.toString());}};Looper.loop();}}.start();DBG.log(TAG, "Begin Post");/** 等待handler2初始化完成 */while (handler2 == null);/** * 这个runable跟调用的handler初始的线程是同一个线程 , 使用handler的时候要等到run完成才出现按键 * 使用handler2的时候,按键是很快就出现了 */handler2.post(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 9; i++) {DBG.log(TAG, "run");try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}}});DBG.log(TAG, "After Post");}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.a_button1:new Thread() {public void run() {handler.obtainMessage(0, "Hello Wangyidong").sendToTarget();};}.start();break;case R.id.a_button2:handler2.obtainMessage(0, "Hello World").sendToTarget();break;}}}
源码下载:http://download.csdn.net/detail/yidong_wang/8975697
0 0
- Study-android 的handler和message学习
- android handler和message的常用方法
- Android Looper Handler 和Message
- Android Handler、LOOP和Message
- Android的Message机制---Handler、Message、Looper
- [android开发入门]Handler和Message的应用
- Android程序设计:Handler和Message很绕的写法
- Android的消息处理:Looper,Handler和Message
- Android Message.obtain() 和Handler.obtainMessage()的区别
- Android编程学习之Message处理Handler
- android Handler 和Message消息机制
- android 多线程之Handler和Message未完成
- 详解Android中的Looper,Handler和Message
- Android中的Looper,Handler,Message和MessageQueue
- android-Message.obtain和handler.obtainMessage
- Android中的Handler机制分析(一) Handler和Message分析
- 关于android Handler Message Looper的理解
- android Looper Message Handler中三者的关系
- How-to: Enabled hive job running support on hive
- 浅析JTable与TableModel、TableCellRenderer、TableCellEditor接口——使用JComboBox显示单元格的值
- A very hard mathematic problem(二分)
- zend 集成svn
- HashMap存储原理以及与hashcode、equals方法的关系
- Study-android 的handler和message学习
- Server redirected too many times
- 关于JSP的Cookie的入门学习,以及部分代码的备注解释
- log4j一直报错,log4j:WARN No appenders could be found for logger,解决方法
- C++_运算符重载_前缀自增与后缀自增
- 三分钟get13个神级邮件营销技巧!
- 免费且超级好用的搜索引擎INSO
- jquery is用法
- SQL查询的时候可自带循环