1

关于 Java Andriod 处理程序:

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

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

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

4

2 回答 2

2

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

另一个常见的用例是如果您想从 onCreate 中找出视图的大小。在 onCreate 中,视图还没有被测量,所以这不起作用:

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

相反,您可以这样做:

view.post(new Runnable() {public void run() {Log.d(TAG, view.getWidth());}}) ;
于 2013-04-13T06:44:49.610 回答
0

我建议使用AsyncTask<>而不是Handlers,因为它们更容易理解并且代码更简洁。我知道我正在转移发布的原始问题,但这只是一个建议。如果您想了解更多关于 AsyncTask<> 的信息,请点击下面的链接。

异步任务

于 2013-01-03T17:22:26.633 回答