0

非同期タスクの詳細はわかりません。
最近、プロジェクトで非同期タスクを使用してサーバー側からデータを取得し、結果に応じて 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) {
        }

                }
            });
}

どちらが最良の方法で、違いは何ですか?

4

1 に答える 1

4

の間違った実装アプローチAsyncTask

protected void onPostExecute(ArrayList<StationSlots> result)

は既にMainUiThreadrunOnUiThread(new Runnable()で実行されているため、書き込む必要はありません OnPostExecute()

また、ワーカー スレッドで実行されている AsyncTaskpublishProgress();から UI を更新するためにも使用されます。また、フォームdoInBackground()を呼び出すと実行が開始され、 MainUIThreadでも実行されるため、AsyncTask のどこにも必要ありません。( を呼び出さずに から UI を更新する場合を除く)publishProgress();doInBackground()onProgressUpdate(Integer... progress)runOnUiThread(new Runnable()doInBackground()publishProgress();

于 2013-01-10T06:27:42.450 に答える