Android的Handler使用总结
来源:互联网 发布:淘宝姐优惠券助手 编辑:程序博客网 时间:2024/05/18 18:01
前言:
由于在阅读代码时,碰到了Handler.post()方法,于是,就耐下心来查阅相关资料,现在在这里,简单做个总结;
首先,从Android Developer的官方解释可以看到:
A Handler allows you to send and process Message
and Runnable objects associated with a thread's MessageQueue
. Each Handler instance is associated with a single thread and that thread's message queue. When you create a new Handler, it is bound to the thread / message queue of the thread that is creating it -- from that point on, it will deliver messages and runnables to that message queue and execute them as they come out of the message queue
其大体意思是:
一个Handler可以发送/处理与线程的消息队列联系在一起的Message和Runnable对象,每个Handler实体都伴随这一个线程和一个消息队列,当你创建一个新的Handler时,它会与创建Handler的这个线程及这个线程的消息队列绑定在一起;至此,Handler会发送Message/Runnable到消息队列,然后当从消息队列中取出消息时,就会去执行这些消息;
然后下面,就总结了自己在使用过程中常见的两种有关Handler的使用:
一种是通过post()方法来调用的,一种是通过sendMessage()方法来调用的;
I>Handler.post()
代码示例如下:
package com.example.dai.testjava;import android.os.Bundle;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.util.Log;public class TestHandlerActivity extends AppCompatActivity { Handler handlerPost = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_handler); Log.e("currentThreadOnCreate:", "" + Thread.currentThread().getId()); testHandlerPost(); } /*** * 第一种使用Handler的方式: * 通过post(Runnable)方法 * **/ public void testHandlerPost(){ HandlerPostRunnable handlerPostRunnable = new HandlerPostRunnable(); handlerPost.post(handlerPostRunnable); } class HandlerPostRunnable implements Runnable{ @Override public void run() { Log.e("currentThreadRunnable:", "" + Thread.currentThread().getId()); } }}
运行结果如下:
代码分析:
从上述,我们可以看出,Handler若在哪个线程中创建,那么与其相连的Runnable里边的run()方法就会在哪个线程中去执行;
II>Handler.sendMessage()
对于这种方法的调用,我们一般在Android的子线程中去刷新UI时会用得比较多,因为子线程是没法更新UI的,
所以就需要发送消息到主线程的handlerMessage()中去更新UI
代码示例如下:
package com.example.dai.testjava;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.util.Log;public class TestHandlerActivity extends AppCompatActivity { Handler handlerSendMessage = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case 0: /** * 一般在这里会用作UI的更新 * **/ /*** * 当从消息队列中取出这个空消息时, * 就会在这里予以执行 * **/ Log.e("currentThreadSendMsg:", "" + Thread.currentThread().getId()); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_handler); Log.e("currentThreadOnCreate:", "" + Thread.currentThread().getId()); testSendMessage(); } public void testSendMessage(){ new Thread(){ @Override public void run() { /*** * 发送消息到消息队列 * **/ handlerSendMessage.sendEmptyMessage(0); } }.start(); }}
运行结果如下:
- Android的Handler使用总结
- android handler使用总结
- Android Handler使用总结
- Android handler使用总结
- Android-Handler 总结(Handler 的使用 ,Looper , MessageQueue , HandlerThread )
- Android-Handler 总结(Handler 的使用 ,Looper , MessageQueue , HandlerThread )
- Android的Handler总结
- Android的Handler总结
- Android的Handler总结
- Android 的 Handler 总结
- Android的Handler总结
- Android的Handler总结
- Android的Handler总结
- Android的Handler总结
- Android的Handler总结
- Android的Handler总结
- Android的Handler总结
- Android的Handler总结
- 从Java反射机制到Android注解框架
- HDU 单词总数
- adb shell 调试 Android 串口
- 贪心<haonan>
- 【Debug】Hander processing failed; nested exception is java.lang.NoClassDefFoundError; javax/servlet/j
- Android的Handler使用总结
- 函数模板的完善
- 16. 3Sum Closest
- nginx.conf配置详解
- 【步兵 cocos2dx】图片管理 之 什么时候打pvr.ccz
- Combination Sum 找出Sum符合要求的组合
- hdu 5542(树状数组优化dp)
- linux 的重定向
- Semi-Automatic 3D Annotation3D源码编译过程记录