1

誰かがこの画像ダウンロードコードを手に入れてくれませんか?私はそれをバックグラウンドで実行したいのですが、Androidドキュメントによると、新しいThread(new Runnable())は間違いなく進むべき道ではないようです、そして私はこれにアプローチする他の方法がわかりません:

// caller
while( exhibitorCursor.moveToNext() )
{
  new Thread(new Runnable()
  {
    public void run()
    {
      downloadImage(exhibitorId, exhibitorString, DOWNLOAD_EXHIBITOR);
    }
  }).start();
}

// first function
public void downloadImage(long id, String externalImageUrl, int type)
{
  // logic junk here

  if( !(new File(localImageName).exists()) )
  {
    DownloadFromUrl(externalImageUrl, localImageName);
  }
}

// second function
public void DownloadFromUrl(String fileUrl, String fileName)
{
  // this is the downloader method
  try
  {
    URL url = new URL(fileUrl);

    File file = new File(fileName);

    URLConnection ucon = url.openConnection();

    InputStream is = ucon.getInputStream();
    BufferedInputStream bis = new BufferedInputStream(is, 8192);

    ByteArrayBuffer baf = new ByteArrayBuffer(50);
    int current = 0;
    while( (current = bis.read()) != -1 )
    {
      baf.append((byte)current);
    }

    /* Convert the Bytes read to a String. */
    FileOutputStream fos = new FileOutputStream(file);
    fos.write(baf.toByteArray());
    fos.close();
  }
  catch( IOException e )
  {
    Log.d("ImageManager", "Error: " + e);
  }

}

これを行うための痛みの少ない方法はありますか?後でアプリで使用するために20枚程度の画像をダウンロードしているだけで、すぐにロックされます。

関連性がないかもしれませんが、これが私がiPhoneバージョンのObj-Cでそれを達成している方法です。

for( NSDictionary *exhibitor in exhibitors )
{
    [self performSelectorInBackground:@selector(downloadExhibitorImage:) withObject:exhibitor];
}
4

1 に答える 1

3

DownloadManagerを見て、代わりにAsyncTaskを見てください

于 2011-07-05T21:35:11.473 に答える