0

私はしようとするASyncTaskを持っています

  1. ディスク上の画像を見つける
  2. 新しいオンラインかどうかを確認します

次にonPostExecuteで画像を更新します

ディスクをチェックした後(高速ですが、 ListView getViewなどではまだ遅い)とオンラインでチェックした後の両方で、画像を更新(つまり、UIスレッドに同期)したいと思います。

ヘルプを正しく読めば、publishProgress(Progress...)を使用してonProgressUpdate ( UI スレッドで実行) を呼び出すことができます。タイミングは気にしませんが(少し待たなければならない場合)、「オンライン進行状態」の前に「ディスク進行状態」が発生するようにしたいと思います

4

3 に答える 3

2

いつ呼び出すpublishProgress()か、どのパラメータを渡すかは完全にあなた次第です。

バックグラウンド スレッドから 2 回呼び出したい場合 (ディスク チェックの後に 1 回、ネットワーク チェックの後に 1 回)、それで問題ありません。2 つの呼び出しを区別するには、現在のonProgressUpdate()状態を追跡するか、その関数が既に呼び出された回数を数えます。

UI スレッドでの呼び出しは、バックグラウンド スレッドで行う呼び出しと同じ順序になりpublishProgress()ます。

于 2013-07-21T13:16:06.703 に答える
1

私があなたを正しく理解していれば、publishProgress を実行すると onProgressUpdate が同じ順序で呼び出されるかどうかを尋ねます。ハンドラーを介して UI スレッドにメッセージを投稿しているため、答えは「はい」です。

AsyncTask publishProgress のコードは次のとおりです。

sHandler.obtainMessage(MESSAGE_POST_PROGRESS, new AsyncTaskResult<Progress>(this, values)).sendToTarget();
于 2013-07-21T13:15:42.753 に答える
1

AsyncTaskRunnables をメイン スレッドに送信して、UI スレッドでメソッドを実行しますHandler。これは、FIFO キュー内のHandlerすべてを取得し、並列処理なしで順番に実行します。Runnableしたがって、 disk-progress-state が online-progress-state の前に発生した場合、 の順序publishProgressは保持されます。同じことが、publishProgress と onPostExecute の順序にも当てはまります。

于 2013-07-21T13:16:30.713 に答える