是否有Handler类的替代品?

时间:2012-10-07 11:09:20

标签: android

我喜欢Handler类的便利性;我可以轻松排队消息甚至延迟消息。但是,所有代码都在UI线程上运行,这会导致动画卡住。

是否有一个类,如Handler,不能在UI线程上运行?

2 个答案:

答案 0 :(得分:0)

您始终可以使用HandlerThread。不幸的是,我没有这个方便的简单例子。

就个人而言,我倾向于直接使用java.util.concurrent类来处理不涉及主应用程序线程的事情(例如LinkedBlockingQueueExecutorService)。

答案 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线程”,这本身并不是一个很好的技术基础。