【发布时间】:2016-09-21 11:15:21
【问题描述】:
我遇到了需要从两个不同的线程执行一些相同的 UI 操作(比如说显示 Toast 消息)的情况。不同之处在于第一个线程是活动的 UI 线程,另一个是我开始运行一些后台进程的单独线程。问题是确保显示Toast 消息的代码始终从UI 线程运行的最佳实践是什么。我在这里看到了两种可能性。
我们有一个函数应该显示测试消息,例如
private void showToast() {
Toast.makeText(context, message, Toast.LENGTH_LONG).show();
}
每次我们调用这个方法时,我们确保它必须在 UI 线程上调用,我们可以从我们调用 showToast() 的地方使用runOnUiThread()。
另一个选项是确保显示Toast 的代码在showToast() 方法本身内的UI thread 上运行。像这样的东西:
private void showToast() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(context, message, Toast.LENGTH_LONG).show();
}
});
}
首选做法是什么?为什么?
【问题讨论】:
-
为什么不使用第二个选项?
标签: java android ui-thread android-runonuithread