传递函数作为参数以在 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()
因为我在任务中。
我实际上正在尝试在 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()
因为我在任务中。