如果我创建
HandlerThread sWorkerThread = new HandlerThread( "launcher-loader" )
然后我创建
Handler sWorker = new Handler( sWorkerThread.getLooper() );
sWorker
现在怎么办?它在主线程中工作?谢谢。
答案 0 :(得分:0)
您的sWorker
可用于将邮件发送到sWorkerThread
的邮件队列。您使用sWorker
发送的所有工作都将在sWorkerThread
上运行,而不是主线程。无法在主线程上执行的长任务可以在HandlerThread上完成。
请参阅Handler here简介。
HandlerThread here的介绍。
答案 1 :(得分:0)
HandlerThread
是Thread
子类,您必须调用其start()
方法来激活新线程。如果HandlerThread
未激活,则其getLooper()
方法实际返回null
(如果传递给Handler
构造函数,则会导致抛出异常)。
因此,您的代码应如下所示:
HandlerThread sWorkerThread = new HandlerThread( "launcher-loader" );
sWorkerThread.start();
Handler sWorker = new Handler( sWorkerThread.getLooper() );
使用此代码,sWorker
将在新线程(而不是主线程)中运行。