主要UI线程上的Android Runnable和处理程序

时间:2013-01-03 17:13:21

标签: java android thread-safety runnable

关于Java Andriod处理程序:

handler.post(new Runnable(){
    public void run() {
        // do stuff
    }
});

据我所知,这可以在处理程序实例化的任何线程上运行。所以让我们说在Android中我实例化主线程上的处理程序,我的问题是runnable的重点是什么?您将任务添加到主UI线程的消息传递队列中,为什么不跳过runnable并创建一个方法,因为您已经在主线程上。我见过程序员这样做,我想知道为什么?

我知道我们可以做Thread genThread = new Thread(new myRunnable());但我想知道主线程上是否有Runnable的值。

2 个答案:

答案 0 :(得分:2)

有时你想运行一些代码,但你不希望它立即运行,你想推迟它。根据我的经验,最常见的用途之一是当您处于布局阶段并且您希望在布局阶段完成后“排队”某些事情。为此,您只需将一个Runnable发布到UI线程的消息队列中,它将放在消息队列的末尾...这正是您想要的位置。

另一个常见的用例是,如果您想从onCreate中找出视图的大小。在onCreate中,视图尚未测量,因此不起作用:

Log.d(TAG, view.getWidth());

相反,你可以这样做:

view.post(new Runnable() {public void run() {Log.d(TAG, view.getWidth());}}) ;

答案 1 :(得分:0)

我建议使用 AsyncTask<> 而不是处理程序,因为它们更容易理解并使代码更清晰。我知道我转移了原来提出的问题,但这只是一个建议。如果您想了解有关AsyncTask<>的更多信息下面是链接。

AsyncTask

相关问题