运行 UI 线程上的方法

Running a method on UI thread

我的问题看起来很简单,但我似乎逻辑不对。 我正在尝试使用 UI 线程从其他 classes 获取 运行 方法。我可以通过像这样包装我的方法来做到这一点

    runOnUiThread(new Runnable() {
    public void run() {
        Log.d("UI thread", "I am the UI thread");
           ui.myMethod("changetext");
    }
});

但我的目标是让 class 包装 方法 成为 UI 线程上的 运行 作为具有 runOnUiThread() 将近 5 次在单个 class 中似乎非常不整洁。有什么指点吗?

如果您真的必须从多个 类 执行此操作,您可以创建一个 public 静态方法,它将 运行 在主线程上启用 运行。像这样:

public class Util {
    public static void runOnUI(Activity a, Runnable r){
        a.runOnUIThread(r);
    }
}

你可以这样调用它:

Util.runOnUI(getActivity(), mRunnable);

如果您重复调用同一个 UI 方法,您可以通过在方法中创建 Runnable 来简化客户端代码:

private void updateUi(final String message) {
   runOnUiThread(new Runnable() {
      public void run() {
         ui.myMethod(message);
      }
   });
}

然后您的客户端代码将简单地调用 updateUi("changetext")。 (此代码假定 ui 是最终的。如果不是,您可以传入最终引用。)

如果您每次都调用不同的 UI 方法,这不会给您带来任何好处,因为每个 UI 方法都需要一个单独的更新方法。您现有的代码非常优雅。