gpt4 book ai didi

android - 更新 GUI : Runnables vs Messages

转载 作者:IT王子 更新时间:2023-10-28 23:48:58 26 4
gpt4 key购买 nike

要从其他线程更新 GUI,主要有两种方法:

  1. 将 java.lang.Runnable 与以下任一方法一起使用:

    Activity.runOnUiThread(Runnable)
    View.post(Runnable)
    View.postDelayed(Runnable, long)
    Handler.post(Runnable)
  2. 使用android.os.Message:

    Handler.sendMessage(Message) / Handler.handleMessage(Message)

您也可以使用 AsyncTask,但我的问题更侧重于更新一个非常简单的组件的用例。让我们看看如何使用这两种方法来完成:

  1. 使用 Runnables:

    TextViev tv = ...;
    final String data = "hello";
    Runnable r = new Runnable() {

    @Override
    public void run(){
    tv.setText(data);
    }

    };
    //Now call Activity.runOnUiThread(r) or handler.post(r), ...
  2. 使用消息:

    Message m = handler.obtainMessage(UPDATE_TEXT_VIEW, "hello");
    handler.sendMessage(m);

    //Now on handler implementation:
    @Override
    public void handleMessage(Message msg) {
    if(msg.what == UPDATE_TEXT_VIEW){
    String s = (String) msg.obj;
    tv.setText(data);
    } ... //other IFs?
    }

恕我直言,消息不是要走的路,因为:

  • 对于新的非 Android 程序员来说不容易理解(处理程序在构造过程中 Hook 到其线程)。
  • 如果消息跨越进程边界,则对象负载应该是 Parcellable。
  • 消息被重复使用(如果没有正确清理容易出错?)
  • 处理程序具有双重作用(它发送消息,但也处理它们)
  • 消息属性是公开的,但也提供 getter/setter。

另一方面,Runnables 遵循众所周知的命令模式,并且对程序员更加友好和可读。

那么使用 Messages 而不是 Runnables 有什么优势呢?在现代 Android 编程中,消息是否被推到了后台?有什么可以用 Messages 做而 Runnables 不能做的事情吗?

提前致谢。

最佳答案

我会说使用 MessageRunnable 之间几乎没有区别。它主要归结为个人喜好。为什么?查看源代码,您会发现发布 Runnable 使用完全相同的消息传递机制。它只是将 Runnable 附加到 Message 并发送。

4.4.2 源代码

public final boolean post(Runnable r) {
return sendMessageDelayed(getPostMessage(r), 0);
}

private static Message getPostMessage(Runnable r) {
Message m = Message.obtain();
m.callback = r;
return m;
}

引用:Grep Code - Handler

关于android - 更新 GUI : Runnables vs Messages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11208057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com