java是否使用UI线程显示toast消息?
我有一个侦听器,它从一个单独的进程中获取更新。(我正在使用IPC。)
Log.i("Test1", Thread.currentThread().toString()); // Thread[Binder_3,5,main]
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.i("Test2", Thread.currentThread().toString()); // Thread[main,5,main]
switch (taskId) {
case Constants.DOWNLOAD_TASK_EXECUTED: {
long time = prefs.getLong(Constants.LAST_UPDATED_KEY, System.currentTimeMillis());
String msg = Utils.getLastUpdatedString(res, time, Locale.getDefault(), false);
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG).show();
break;
}
case Constants.DELETED_TASK_EXECUTED: {
String msg = res.getString(R.string.delete_success);
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG).show();
break;
}
}
}
});
是否有必要调用runOnUiThread
方法并传入Runnable
以在获取更新时显示toast消息?或者只在同一个线程(活页夹3)中显示它们可以吗?我没有修改UI中的任何内容
# 1 楼答案
我的专业安卓4应用程序开发书指出,“祝酒词必须在GUI线程上创建和显示;否则,您可能会引发跨线程异常。”
# 2 楼答案
Tost或日志在线程或其他进程中工作(但最好不要冒险!)但是更改UI必须始终在UI线程中运行,就像您使用
runOnUiThread
或使用handler
所说的那样