传递函数作为参数以在 UI 线程上启动

passing a function as a parameter to launch on UI Thread

我实际上正在尝试在 Android 上开发一个函数来计算一些东西,但是,这个方法可以(或不能!)从任务中调用。 这个方法每做一步都要Toast something,我找到了方法.runOnUiThread(Runnable ...)。直接写在我的函数里。

这是可行的,但是如果将来有人不想要 Toasts 而更喜欢更新加载栏怎么办? 这就是为什么我会知道是否有可能向我的函数传递一个可以在 UI 线程上 运行 的方法,并且对我的函数的用户来说是最简单的方法?也许有一个高效的 lambda 表达式语法?

提前致谢。

有一些方法:

您已经提到了第一种方式:

activity.runOnUniThread(Runnable runnable);


您也可以使用以下方法:

view.post(Runnable runnable);

或:

view.postDelayed(Runnable runnable, int delay);

示例:

textView.post(r -> { 
    Log.e("Activity" ,"Text"); 
});

只需将您的代码写入可运行程序即可。您甚至可以预先定义它:

Runnable r = new Runnable(r -> {
  // make your stuff
});
// ...
button.post(r);


最后一个选项:Handler

Handler handler = new Handler();
// You know the scheme :
handler.post(r);
// or
handler.postDelayed(r, 1000);

感谢您的回答,我找到了解决办法。

例如,我有一个定义方法的接口action(int x, int y)。 然后我必须将此接口类型的参数传递给我的方法,此方法只需使用更新后的值调用 myInterface.action(..., ...)

然后在启动我的计算方法的第二个线程中,我有这样的东西:

myMethod(<some others args> ,
                (int x, int y) ->
                        activity.runOnUiThread(() -> { /*Some code */ })
        )

所以我可以直接选择调用方法的位置,这种处理程序的行为是什么。在这种情况下,我使用 runOnUiThread() 因为我在任务中。