【问题标题】:Each Android thread is associated with Looper(Message Queue)?每个Android线程都关联Looper(Message Queue)?
【发布时间】:2014-10-03 07:33:48
【问题描述】:

我正在尝试理解线程、处理程序、循环器。我看过视频,其中有人说每个 Android 线程都与 Looper(消息队列)相关联。所以这意味着当我创建 Thread 类实例时,它隐含地创建了它自己的 looper 连接到这个线程?或者这是错的?处理程序连接到创建它的线程,如果处理程序将发布消息的每个线程中没有循环器? 另一个问题是关于 HandlerThread 的。使用这个类的目的和优缺点是什么。 我希望你的帮助。提前谢谢大家。

编辑 例如,我想知道 Looper 是否在调用后与线程相关联 Thread myThread = new Thread();
或者您应该为调用 Looper.prepare(); 的线程明确指定 lopper;在你的线程中又隐含地创建与调用方法的线程关联的 looper 的新实例。正如我在 Looper 类的源代码中看到的那样,它在准备中调用 ThreadLocal.get 它在哪里获取当前线程。所以结论是默认情况下没有与简单线程关联的弯针?我对吗 ? 而且我还注意到 Handler 的所有构造函数都调用 Handler(Callback callback, boolean async)。 Looper.myLooper();方法被调用。 所以据我了解,这意味着跟随。

Thread myThread = new Thread(new Runnable() {
public void run() {
//some stuff here 
}
});
myThread.start();

这里没有 Looper 与线程相关联。 下一个例子。

  Thread myThread = new Thread(new Runnable() {
    public void run() {
     Handler myHandler = new Handler();
    }
    });
    myThread.start();

这里 Handler 在创建新的 Handler 实例时会隐式关联到 looper。 下一个例子。

 Thread myThread = new Thread(new Runnable() {
        public void run() {
         Looper.prepare();
        }
        });
        myThread.start();

在此示例中,将通过调用 prepare 方法显式创建循环器。 我是正确的 ?请发表评论。

编辑 2

第二个例子会导致

java.lang.RuntimeException:无法在线程内创建处理程序 没有调用 Looper.prepare() 这样的异常所以结论是 只有调用 Looper.prepare() 的线程

;会有它自己的 Looper,否则在这样的线程中创建处理程序时会导致异常。

【问题讨论】:

  • 大部分是对的,但你的最后一个例子没用。在调用Looper.prepare() 之后,它需要创建一个Handler 并将其暴露在某个地方以便其他线程可以发布到队列中,然后调用Looper.loop() 开始处理队列。正如您编写的那样,它将创建消息队列,然后什么也不做并退出。顺便说一句,虽然很高兴知道它是如何工作的,但创建自己的 Looper 的理由很少。

标签: java android multithreading


【解决方案1】:

线程通过调用Looper.prepare() 与消息队列相关联。随后在该线程中创建的任何Handler 都将与同一消息队列相关联。线程通过调用Looper.loop() 开始处理其消息队列。 Looper 线程通常不会做任何事情,除了处理自己的消息队列。

【讨论】:

  • @Hey-men-whatsup 仅当它调​​用Looper.prepare()
【解决方案2】:

据我了解,Looper 和 Handler 只是帮助类,用于轻松处理线程中的生成和处理消息。但是线程除了处理消息之外还可以做任何事情。

【讨论】:

    猜你喜欢
    • 2013-09-17
    • 2011-04-22
    • 2012-01-16
    • 2014-04-19
    • 2016-03-19
    • 1970-01-01
    • 2014-05-27
    • 2019-05-05
    • 1970-01-01
    相关资源
    最近更新 更多