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