Реализация обработчика-лупера в Android - PullRequest
3 голосов
/ 15 марта 2011
  1. У меня есть активность с обработчиком (поток пользовательского интерфейса)
  2. Я запускаю новый поток и создаю handler.post (новый MyRunnable ()) - (новый рабочий поток)

В документации Android говорится о методе post: «Заставляет Runnable r быть добавленным в очередь сообщений. Runnable будет запущен в потоке, к которому подключен этот обработчик.»

Обработчик подключен к потоку пользовательского интерфейса.Как Android может запускать runnable в том же потоке пользовательского интерфейса без создания нового потока?

Будет ли новый поток создан с использованием Runnable из handler.post ()?Или это только метод run () будет вызываться из подкласса Runnable?

Ответы [ 2 ]

5 голосов
/ 15 марта 2011

Вот пример грубого псевдокода, как использовать обработчики - надеюсь, это поможет:)

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();
        });
    }
}
3 голосов
/ 15 марта 2011

Обработчик подключен к потоку пользовательского интерфейса.

Исправить.

Как Android может работать в том же потоке пользовательского интерфейса, который можно запустить без создания нового потока?

Любой поток, включая поток основного приложения ("UI"), может вызывать post () для Handler (или для любого View, в этом отношении).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...