有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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中的任何内容


共 (2) 个答案

  1. # 1 楼答案

    我的专业安卓4应用程序开发书指出,“祝酒词必须在GUI线程上创建和显示;否则,您可能会引发跨线程异常。”

  2. # 2 楼答案

    Tost或日志在线程或其他进程中工作(但最好不要冒险!)但是更改UI必须始终在UI线程中运行,就像您使用runOnUiThread或使用handler所说的那样

    Handler handler = new Handler();
    handler.post(new Runnable() {
    
        @Override
        public void run() {
            // TODO Auto-generated method stub
    
        }
    });