3
  1. 我有处理程序的活动(UI 线程)
  2. 我启动新线程并制作 handler.post(new MyRunnable()) - (新工作线程)

Android 文档说关于 post 方法:“导致 Runnable r 被添加到消息队列中。runnable 将在此处理程序附加到的线程上运行。”

附加到 UI 线程的处理程序。android如何在不创建新线程的情况下在同一个UI线程中运行runnable?

是否将使用来自 handler.post() 的 Runnable 创建新线程?还是只会从 Runnable 子类调用 run() 方法?

4

2 回答 2

5

这是一个关于如何使用处理程序的粗略伪代码示例 - 我希望它有所帮助:)

class MyActivity extends Activity {

    private Handler mHandler = new Handler();

    private Runnable updateUI = new Runnable() {
        public void run() {
            //Do UI changes (or anything that requires UI thread) here
        }
    };

    Button doSomeWorkButton = findSomeView();

    public void onCreate() {
        doSomeWorkButton.addClickListener(new ClickListener() {
            //Someone just clicked the work button!
            //This is too much work for the UI thread, so we'll start a new thread.
            Thread doSomeWork = new Thread( new Runnable() {
                public void run() {
                    //Work goes here. Werk, werk.
                    //...
                    //...
                    //Job done! Time to update UI...but I'm not the UI thread! :(
                    //So, let's alert the UI thread:
                    mHandler.post(updateUI);
                    //UI thread will eventually call the run() method of the "updateUI" object.
                }
            });
            doSomeWork.start();
        });
    }
}
于 2011-03-15T20:33:39.397 回答
3

附加到 UI 线程的处理程序。

正确的。

android如何在不创建新线程的情况下在同一个UI线程中运行runnable?

任何线程,包括主应用程序(“UI”)线程,都可以调用 post() Handler(或任何View,就此而言)。

于 2011-03-15T18:56:00.060 回答