从android的aysnc任务中更新UI的最好方法是什么?



我不知道异步任务的细节,
我最近在我的项目中使用异步任务从服务器端获取一些数据,并根据结果更新我的UI,我以通常的方式实现了一个进度对话框,并在我的onPostExicute方法中像这样删除它

@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) {
    }
     }

但是我发现一些代码做了同样的事情,但是在ui线程上执行动作,就像这样

@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) {
        }
                }
            });
}

我想知道哪一种是最好的方法,它们有什么区别?

AsyncTask的错误实现方法。

protected void onPostExecute(ArrayList<StationSlots> result)

已经在MainUiThread上运行了,所以你不必在OnPostExecute()上写runOnUiThread(new Runnable()

publishProgress();是用来更新UI从doInBackground()的AsyncTask,因为它在一个工作线程上运行。当你从doInBackground()调用publishProgress();时,onProgressUpdate(Integer... progress)也会在MainUIThread上运行,所以你不需要在AsyncTask中的runOnUiThread(new Runnable()。(除非你想从doInBackground()更新UI而不调用publishProgress();)

相关内容

  • 没有找到相关文章

最新更新