我喜欢Handler类的便利性;我可以轻松排队消息甚至延迟消息。但是,所有代码都在UI线程上运行,这会导致动画卡住。
是否有一个类,如Handler,不能在UI线程上运行?
答案 0 :(得分:0)
您始终可以使用HandlerThread
。不幸的是,我没有这个方便的简单例子。
就个人而言,我倾向于直接使用java.util.concurrent
类来处理不涉及主应用程序线程的事情(例如LinkedBlockingQueue
,ExecutorService
)。
答案 1 :(得分:0)
我对目前接受的答案感到有些困惑,似乎暗示在非UI线程上使用Handler
是不可能的,因为这是我经常做的事情,我认为这是非常有名。
在非用户界面Thread
:
@Override
public void run() {
Looper.prepare();
...
mThreadHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
...
break;
default:
break;
}
}
};
Looper.loop();
}
使用mThreadHandler
,可以发送消息以由上述非UI Handler
中的Thread
处理。
如果有充分理由不使用Handler
/ Message
类以这种方式在非UI线程上发布工作,那么我想知道。到目前为止,它一直对我很好。我之所以读取不以这种方式使用Handler
的唯一原因是“Handler
用于将内容发布到UI线程”,这本身并不是一个很好的技术基础。