Android 消息机制
来源:互联网 发布:电子海报制作软件 编辑:程序博客网 时间:2024/06/06 18:23
前言:
关于Android的消息机制,因为涉及的东西太多,网上讲的都深浅不一,我这边结合Android源码和身边的实际应用对其进行总结,不打算一次总结完毕,后面会慢慢完善.
涉及内容: Handler, Looper, Message, MessageQueue,Thread.
Handler
Android提供了一种异步回调机制handler,允许我们在完成很长时间的任务后做出相应的通知.
作用:(结合Sundy的Android讲义)
a.执行预定任务
b.线程之间通信
并不是所有的线程都有looper对象.
Handler是如何与Looper建立联系的?
Handler的构造函数中有这样的代码:
handler.java
mLooper = Looper.myLooper(); if (mLooper == null) { throw new RuntimeException( "Can't create handler inside thread that has not called Looper.prepare()"); } mQueue = mLooper.mQueue;
在新建Handler时需要设置mLooper成员,Looper.myLooper是从当前线程中获取绑定的looper对象:
looper.java
public static final Looper myLooper() { return (Looper)sThreadLocal.get(); }```若Looper对象没有创建,就会抛异常"Can't create handler inside thread that has not called Looper.prepare()".
如何将一个普通线程变成loope线程?或者如何在新开的线程中创建handler?
常用的写法:
class MyThread extends Thread { public void run() { Log.d(Constant.TAG, MessageFormat.format("Thread[{0}]-- run...", Thread.currentThread().getName())); // 其它线程中新建一个handler Looper.prepare(); // 创建该线程的Looper对象,用于接收消息, //在非主线程中是没有looper的所以在创建 //handler前一定要使用prepare()创建一个Looper myThreadHandler = new Handler() { public void handleMessage(android.os.Message msg) { Log.d(Constant.TAG, MessageFormat.format("Thread[{0}]--myThreadHandler handleMessage run...", Thread.currentThread().getName())); } }; Looper.myLooper().loop();//建立一个消息循环,该线程不会退出 } }```
0 0
- Android消息机制(Handler机制)
- android Handler机制 消息机制
- Android 消息处理机制
- Android消息机制
- android 消息机制
- Android消息机制(一)
- Android消息处理机制
- Android消息处理机制
- Android消息机制(一)
- Android 中的消息机制
- Android 消息通知机制
- Android消息机制学习
- Android消息机制(1)
- Android消息机制
- android消息机制
- Android消息机制
- Android的消息机制
- android消息处理机制
- redis 保存对象方法
- 深入理解HTTP协议
- markdown学习笔记
- 2.29
- orcale 常用DDL 语句
- Android 消息机制
- 读《C语言深度解剖》1
- 《实体解析与信息质量》-1.2.7 复习题
- Android Studio 慢吗?No!!你还不懂她···
- 樱园三舍319
- Flatten Binary Tree to Linked List--LeetCode
- IOS Method swizzling
- 网络协议规范大全
- 当前主流的备份技术与备份模式