我不清楚这种HandlerThread的用法

时间:2015-01-26 06:52:34

标签: android

如果我创建

HandlerThread sWorkerThread = new HandlerThread( "launcher-loader" )

然后我创建

Handler sWorker = new Handler( sWorkerThread.getLooper() );

sWorker现在怎么办?它在主线程中工作?谢谢。

2 个答案:

答案 0 :(得分:0)

您的sWorker可用于将邮件发送到sWorkerThread的邮件队列。您使用sWorker发送的所有工作都将在sWorkerThread上运行,而不是主线程。无法在主线程上执行的长任务可以在HandlerThread上完成。

请参阅Handler here简介。

HandlerThread here的介绍。

答案 1 :(得分:0)

HandlerThreadThread子类,您必须调用其start()方法来激活新线程。如果HandlerThread未激活,则其getLooper()方法实际返回null(如果传递给Handler构造函数,则会导致抛出异常)。

因此,您的代码应如下所示:

HandlerThread sWorkerThread = new HandlerThread( "launcher-loader" );
sWorkerThread.start();
Handler sWorker = new Handler( sWorkerThread.getLooper() );

使用此代码,sWorker将在新线程(而不是主线程)中运行。