2012-03-15 12 views
15

używam AsyncTask przesłać dane do interfejsu użytkownika. Napisałem kod do pobrania danych z serwera w osobnej metodzie i wywołuję tę metodę z doinBackground. To spowoduje błąd, ponieważ metody interfejsu użytkownika nie mogą uzyskać dostępu z doInBackground.but, chcę uzyskać dostęp. jest jakikolwiek alternatywny proces dostępu do metody UI z doinBackground.?Android: Wywoływanie metod na wątku UI z metodą AsyncTask doInBackground

Odpowiedz

47

alternatywa proces jest tam, aby uzyskać dostęp do metody UI z doinBackground.?

Zadzwoń pod publishProgress() w doInBackground(). Umieść swoją logikę aktualizacji interfejsu użytkownika pod numerem onProgressUpdate() swojego AsyncTask. onProgressUpdate() będzie wywoływana w głównym wątku aplikacji (a.k.a., gwint UI) po wywołaniu publishProgress(). Here is a sample project demonstrując to.

+14

Niskie imię wystarczy. +1. –

+0

+1 dla jasnej odpowiedzi –

+0

znał runOnUiThread() sposób, ale podobał mi się inny approachj manipulacyjnych to +1. – Deva

7

połączeń runOnUiThread (działanie Runnable)

more here

+0

hi mogę zadzwonić runOnUiThread() z doInBackground.? To będzie działać.? Lub jak zwykle mogę zadzwonić runOnUiThread z OnCreate sobie.? Tutaj mam jedną wątpliwość. RunOnUiThread zablokuje chwilę UI przesyłanie danych.? –

+0

ma sens, gdy wywołasz go z doInBackground() .. lub nie ma znaczenia .. – ngesh

+0

musisz napisać runOnUIThread gdzie aktualizujesz swój główny interfejs użytkownika –

1

Jak inni zwrócili uwagę, można użyć runOnUiThread. Ale wydaje się to trochę dziwne, że chciałbyś to zrobić na swoim doInBackground. Jeśli chcą, aby wskazać postępu dla użytkownika, co chcesz z tym poradzić w AsyncTask.onProgressUpdate i nazywają publishProgress w doInBackground.

Możesz przeczytać więcej o AsyncTask tutaj: http://developer.android.com/reference/android/os/AsyncTask.html

-Dan

1

Zastosowanie doInBackground() tylko dla zadań, które:

  1. trochę potrwać
  2. UI nie są związane

Wtedy można wdrożyć AsyncTask.onPostExecute() uruchomić kod, aby obsłużyć te wyniki na głównym wątku UI od AsyncTask

Z JavaDoc dla AsyncTask.onPostExecute():

„działającego w wątku UI po doInBackground. ... "

Powiązane problemy