0

サーバーからアンドロイドにいくつかのビットマップをダウンロードする必要があります。を使用して実行される AsyncTask を使用したい.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)。しかし、私の執行者は圧倒されています。だから、私が遅延を入れれば、それは助けになるはずです。私の質問: エグゼキューターを遅らせるにはどうすればよいですか? 使用することを考えてhandler.postDelayいますが、それはランナブルのみを受け入れます。エグゼキュータで動作させる方法はありますか?

良い解決策は、一度に 20 回の呼び出しを実行し、100 ミリ秒待って次の 20 回を実行することです。Android でそれを行う方法を知っている人はいますか?

@ピート

呼び出しごとに 1 つのスレッドを使用しています。1 つのスレッドで複数の呼び出しを行うと問題が発生するかどうかはわかりませんでした。

@Override
protected Bitmap doInBackground(Void... params) {
   try {

      HttpURLConnection conn = (HttpURLConnection) url.openConnection();
      conn.setDoInput(true);
      conn.connect();
      InputStream is = conn.getInputStream();
      return BitmapFactory.decodeStream(is);
   } catch (IOException e) {
      e.printStackTrace();
      return null;
   }
}
4

2 に答える 2

0

一時停止を追加するだけの場合は、doInBackground で次を使用します。

count = 1;
// use your loop of choice
for(int i = 0; i < n; i++) {
            // Do your stuff here...
    if(count % 20) { // Sleep every 20 iterations
        Thread.sleep(100);
    }
    count++;
}

ただし、@petey が述べたように、コードの方が役立ちます。何をしているかによっては、AsyncTask (おそらく IntentService) を使用するよりも優れた代替手段がある場合があります。

于 2013-10-23T19:01:37.710 に答える
0

IntentService を使用するという cYrixmorten のアイデアに +1。私の経験では、特に大量の情報をダウンロードする場合は、AsyncTask を使用するよりもはるかに信頼性が高くなります。

特に画像のダウンロードを扱っている場合は、Universal Image Loaderを見ましたか? これは、その特定の目的のために設計されたオープン ソース ライブラリです。いくつかのプロジェクトで使用しましたが、実装が非常に簡単で、画像のダウンロード、スレッド化、およびキャッシュを処理します。

お役に立てれば!

于 2013-10-23T20:57:11.027 に答える