如何从线程调用UIThread上的方法?

时间:2015-08-04 03:49:54

标签: java android multithreading

虽然在自己的线程上运行长期任务很有用,但是为了更新UI组件,在UIThread中运行代码是必要的。否则,您的应用程序将在执行期间抛出CalledFromWrongThreadException。如何在UIThread上运行代码?

2 个答案:

答案 0 :(得分:1)

有很多方法可以实现:

  1. 使用runOnUiThread()方法调用
  2. 使用post()方法调用
  3. 使用处理程序框架
  4. 使用Broadcasts和BroadcastReceiver(可选择使用LocalBroadcastManager)
  5. 使用AsyncTask的onProgressUpdate()方法
  6. 方法1:

        runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        // do something
                    }
                });
    

    了解详情:http://www.intertech.com/Blog/android-non-ui-to-ui-thread-communications-part-1-of-5/#ixzz3hnx3hdS5

答案 1 :(得分:1)

是的,你可以使用处理程序在Worker Thread和UI Thread之间进行通信,将下面的代码片段放入你想要更新UI的工作线程中,

Message message = new Message();
Bundle bundle = new Bundle();
bundle.putString("file", pdfPath);
message.setData(bundle);
handler.sendMessage(message); // pass handler object from activity

将与Handler相关的代码放入Activity类

Handler handler = new android.os.Handler() {
    @Override
    public void handleMessage(Message msg) {
          String filePath = msg.getData().getString("file"); // You can change this according to your requirement.

    }
};

如果您不熟悉Handler机制,请先阅读以下链接,它会对您有所帮助

https://developer.android.com/training/multiple-threads/communicate-ui.html