обновить пользовательский интерфейс и событие - PullRequest
0 голосов
/ 05 марта 2011

У меня есть служба, которая непрерывно отправляет значения активности через некоторые пользовательские прослушиватели событий.

Здесь все отлично работает.Некоторые значения отображаются в моей активности, как и ожидалось, но некоторые другие вызывают сбой приложения.Это связано с тем, что некоторые входящие данные рассчитываются в обычном потоке (у меня нет доступа для его изменения), и я знаю, что должен использовать обработчик здесь, но, насколько я пытался, приложение все еще зависало.

более наглядно я хотел бы сделать следующее

onValuesChanged(float val) { 
  myTextView.setText( Float.toString(val) )
} 

, где val вычисляется в обычном потоке, но, конечно, это вызывает сбой приложения при выполнении setText.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

эй, вы можете отправить пользовательскую трансляцию из вашего сервиса, например, такую:

    Intent mintent = new Intent();
    mintent.setAction("com.action");
    mintent.putExtra("name", "value");
    sendBroadcast(mintent);

и зарегистрировать получателя в своей деятельности, который получит значение из входящего намерения, а затем вызовет обработчик, как этот, для обновления пользовательского интерфейса...plese разбираем int в строку при получении

myTextView.post(new Runnable() {

        public void run() {
        myTextView.setText( Float.toString(val) )

        }
    });

Каждый раз, когда вы отправляете трансляцию в свою деятельность, и она обновляет интерфейс. Однако вышеупомянутый способ также подходит, но если вам нужно остатьсясо службой тогда иди этим путем еще выше ......

1 голос
/ 05 марта 2011

Используйте AsyncTask вместо Thread и в onPostExecute () вы можете обновить пользовательский интерфейс.

или использовать Activity.runOnUiThread (new Runnable () {voidrun () {// делаем что-нибудь интересное.}});

...