2013-01-10 4 views
0

Я не знаю очень подробностей задачи async,
Недавно я использовал задачу async в своем проекте, чтобы получить некоторые данные с серверной части и обновить свой пользовательский интерфейс в соответствии с результатом, я внедрил диалог прогресса обычным способом и увольняю это в моем методе onPostExicute как этотКакой лучший способ обновить пользовательский интерфейс из задачи aysnc в Android?

@Override 
    protected void onPostExecute(ArrayList<StationSlots> result) { 
    try { 

    publishProgress(100); 
    WizardStep4.retStationSlots = result;  

     if (WizardStep4.this.dialog != null) { 
       WizardStep4.this.dialog.dismiss(); 
      } 
    } catch (Exception e) { 
    } 
    } 

но я нашел некоторые коды сделали то же самое, но зрелищно действие на поток пользовательского интерфейса, как этот

@Override 
     protected void onPostExecute(ArrayList<StationSlots> result) { 
      runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
     try { 
     publishProgress(100); 
     WizardStep4.retStationSlots = result;    
       if (WizardStep4.this.dialog != null) { 
        WizardStep4.this.dialog.dismiss(); 
       } 
     } catch (Exception e) { 
     } 

       } 
      }); 
} 

Я хотел бы знать, какой из них является лучшим методом и каковы различия?

ответ

4

неправильный подход к внедрению AsyncTask.

protected void onPostExecute(ArrayList<StationSlots> result)

уже работает на MainUiThread так что вам не придется писать runOnUiThread(new Runnable() в OnPostExecute().

Также publishProgress(); используется для обновления UI от doInBackground() от AsyncTask в качестве рабочего потока рабочего потока. И когда вы вызываете publishProgress(); форму doInBackground(), тогда исполнение происходит на onProgressUpdate(Integer... progress), которое также будет работать на MainUIThread, так что вам не нужно никого, где runOnUiThread(new Runnable() в AsyncTask. (за исключением случаев, когда вы хотите обновить пользовательский интерфейс от doInBackground() без звонка publishProgress();)

+0

Спасибо ... за такой быстрый ответ и устранение сомнений, спасибо человеку .... –

+1

Посмотрите на http://developer.android.com /reference/android/os/AsyncTask.html – user370305

+2

@ user370305 - удивительный ответ. –

Смежные вопросы