android 线程中创建消息循环Looper.prepare() Looper.loop()
来源:互联网 发布:大连交通大学网络平台 编辑:程序博客网 时间:2024/04/30 20:01
以下是Android API中的一个典型的Looper thread实现:
//而默认情况下,线程是没有消息循环的,所以要调用 Looper.prepare()来给线程创建消息循环,然后再通过,Looper.loop()来使消息循环起作用。
- class LooperThread extends Thread
- {
- public Handler mHandler;
- public void run()
- {
- Looper.prepare();
- mHandler = new Handler()
- {
- public void handleMessage(Message msg)
- {
- // process incoming messages here
- }
- };
- Looper.loop();
- }
另,Activity的MainUI线程默认是有消息队列的。所以在Activity中新建Handler时,不需要先调用Looper.prepare()。
那么遇到了有多Low的问题呢:
项目中重写了一个HandlerThread,然后定义了post方法,然后在主线程中如下实现:
AsyncHandler.post(new Runnable() {
@Override
public void run() {
try {
Looper.prepare();
// 一坨要异步执行的代码******
Looper.loop();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
那么明眼人一看就看出问题来了 ,这代码一跑异步代码肯定执行不到啊,为啥呢,且看下prepare的实现:
/** Initialize the current thread as a looper.
* This gives you a chance to create handlers that then reference
* this looper, before actually starting the loop. Be sure to call
* {@link #loop()} after calling this method, and end it by calling
* {@link #quit()}.
*/
public static void prepare() {
prepare(true);
}
private static void prepare(boolean quitAllowed) {
if (sThreadLocal.get() != null) {
throw new RuntimeException("Only one Looper may be created per thread");
}
sThreadLocal.set(new Looper(quitAllowed));
}
So,简单,却是问题~
- android 线程中创建消息循环Looper.prepare() Looper.loop()
- Android 线程 Looper.prepare()、Looper.loop()
- Android 线程 Looper.prepare()、Looper.loop()
- Android 线程 Looper.prepare()、Looper.loop();
- Android 线程 Looper.prepare()、Looper.loop();
- Android 线程 Looper.prepare()、Looper.loop() 使用
- Android 线程 Looper.prepare()、Looper.loop()
- Looper.loop() android线程中的消息循环
- Looper.loop() android线程中的消息循环
- Looper.loop() android线程中的消息循环
- Looper.loop() android线程中的消息循环
- Android 线程 Looper.prepare()、Looper.loop() Looper.prepare()和Looper.loop() —深入版
- Android温习:Looper.loop() android线程中的消息循环
- Android -- Looper.prepare()和Looper.loop()
- Android -- Looper.prepare()和Looper.loop()
- Android -- Looper.prepare()和Looper.loop()
- Android -- Looper.prepare()和Looper.loop()
- [转]Android -- Looper.prepare()和Looper.loop()
- Python的函数返回值
- 【bugfix】纠正博文'扩展log4j系列[二]动态、分文件记log'
- dp
- 近期语录
- 创造升华技术的机会,锻炼抽象的能力
- android 线程中创建消息循环Looper.prepare() Looper.loop()
- 寻找类冲突的神奇代码
- 早期struts2中使用JSTL标签的bug
- log4j的异步哲学AsyncAppender
- 邪恶的xwiki
- Mysql的编码解决方案
- HDOJ 4006 The kth great number
- 新人指导计划
- 【VR】虚拟现实软件开发工具与技术