Android 线程 Looper.prepare()、Looper.loop() 使用
来源:互联网 发布:库存明细账软件 编辑:程序博客网 时间:2024/04/30 23:46
以下是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.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()
- Android-Looper类,Looper.prepare()和Looper.loop()
- Android:Looper类,Looper.prepare()和Looper.loop()
- Looper.prepare()和Looper.loop()
- 笔记39 | Android线程之Looper.prepare()+Looper.loop()和HandlerThread()
- Android -- Looper.prepare()和Looper.loop() —深入版
- CodeForces 144C Anagram Search
- Tachyon源码结构分析(二)
- 面向模型
- Oracle 11gR2手工复制
- 基于Eclipse OEPE搭建OSB开发环境
- Android 线程 Looper.prepare()、Looper.loop() 使用
- 第二周上机实践项目——课后实践(1)
- Java IO操作
- badboy+jmeter
- SGU 390 Tickets (数位dp,k进制树的合并)
- The middle-school procedure for Greatest-Common-Divisor
- Class.forName()方法的介绍
- Java第二课:Java入门基础知识
- 黑马程序员——java基础——流程控制语句