Я создал простой пример использования AsyncTask для Android. Он начинается с
onPreExecute(), doInBackground(), publishProgress()
и, наконец,onProgressUpdate()
.В этом doInBackground () работает как фоновый поток, а другой работает в потоке пользовательского интерфейса. Вы не можете получить доступ к элементу пользовательского интерфейса в doInBackground (). Последовательность такая же, как я упомянул.
Однако, если вам нужно обновить какой-либо виджет из
doInBackground
, вы можетеpublishProgress
изdoInBackground
, который будет вызыватьonProgressUpdate
, чтобы обновить виджет пользовательского интерфейса.class TestAsync extends AsyncTask
{ String TAG = getClass().getSimpleName(); protected void onPreExecute (){ super.onPreExecute(); Log.d(TAG + " PreExceute","On pre Exceute......"); } protected String doInBackground(Void...arg0) { Log.d(TAG + " DoINBackGround","On doInBackground..."); for(int i=0; i<10; i++){ Integer in = new Integer(i); publishProgress(i); } return "You are at PostExecute"; } protected void onProgressUpdate(Integer...a){ super.onProgressUpdate(a); Log.d(TAG + " onProgressUpdate", "You are in progress update ... " + a[0]); } protected void onPostExecute(String result) { super.onPostExecute(result); Log.d(TAG + " onPostExecute", "" + result); } } Вызвать это в своей деятельности следующим образом:
new TestAsync().execute();