Шаблон наблюдателя в Android - PullRequest
1 голос
/ 16 августа 2010

У меня есть проблема.
1. У меня есть два потока: рабочий и пользовательский интерфейс.
2. Работник продолжает ожидать данные с сервера, когда получает их, уведомляет поток пользовательского интерфейса.
3. При обновлении пользовательский интерфейс отображает сообщение Toast на экране.

Шаг 3 - проблема, как говорится:

android.view.ViewRoot $ CalledFromWrongThreadException: только оригинальный поток, создавший иерархию представлений, может касаться его представлений.

Используя mHandler, runOnUIThread замедляет поток пользовательского интерфейса (пользовательский интерфейс отображает веб-просмотр), поскольку мне приходится постоянно проверять данные с сервера.

Ответы [ 3 ]

2 голосов
/ 16 августа 2010

Я бы воспользовался сервисом и связал бы вашу деятельность с сервисом.Тогда служба может отправить трансляцию, когда у нее появятся новые данные

2 голосов
/ 16 августа 2010

Используйте AsyncTask для реализации этого. Переопределите doInBackground, чтобы получить данные (они выполняются в отдельном потоке), затем переопределите onPostExecute (), чтобы показать тост (он выполняется в потоке пользовательского интерфейса).

Вот хороший пример http://www.screaming -penguin.com / node / 7746

А вот и официальные документы .

UPD: пример того, как обрабатывать частичный прогресс.

    class ExampleTask extends AsyncTask<String, String, String>{

    @Override
    protected String doInBackground(String... params) {
        while(true){
            //Some logic on data recieve..
            this.publishProgress("Some progress");
            //seee if need to stop the thread.
            boolean stop = true;
            if(stop){
                break;
            }
        }
        return "Result";
    }

    @Override
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);
        //UI tasks on particular progress...
    }
}
1 голос
/ 01 мая 2015

Шаблон Object Observer в Android?

Определение: Шаблон Observer определяет зависимость один-ко-многим между объектами, так чтокогда один объект меняет состояние, все его иждивенцы уведомляются и обновляются автоматически.

       The objects which are watching the state changes are called observer. Alternatively observer are also called listener. The object which is being watched is called subject.

Example: View A is the subject. View A displays the temperature of a     container.  View B display a green light is the temperature is above 20 degree Celsius. Therefore View B registers itself as a Listener to View A.  If the temperature of View A is changed an event is triggered. That is event is send to all registered listeners in this example View B. View B receives the changed data and can adjust his display.

 Evaluation:  The subject can registered an unlimited number of observers. If a new listener should register at the subject no code change in the subject is necessary.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...