0

私のAndroidアプリでは、初期アクティビティを使用してASyncTaskで読み込みを開始し、約10枚の画像をダウンロードしてテーブルに表示します。 DDMSとデバッグモードの調査を始めたばかりです。アプリケーションのロード後に、asynctaskと10個のHTTPスレッドのためのスレッドが1つあります。それは普通ですか?最後の命令が実行されたときに彼らは死んではいけませんか?Androidスレッド待機中

は、ここに私のコードです:

public void download (String imageURL, String path, String filename){ 
    new Thread(){ 
     public void run() { 
        long startTime = System.currentTimeMillis(); 
       try { 
        //Create the path 
        new File(path).mkdirs(); 
        //File to download 
        File file = new File(path+filename); 
        if (!file.exists()){ 
         Log.d(Manager.getAppName(),file.getName()+" dont exists"); 
         URL url = new URL(imageURL); 
         URLConnection ucon = url.openConnection(); 
         InputStream is = ucon.getInputStream(); 
         BufferedInputStream bis = new BufferedInputStream(is); 
         ByteArrayBuffer baf = new ByteArrayBuffer(50); 
         int current = 0; 
         while ((current = bis.read()) != -1) { 
           baf.append((byte) current); 
         } 
         FileOutputStream fos = new FileOutputStream(file); 
         fos.write(baf.toByteArray()); 
         bis.close(); 
         fos.close(); 
            is.close(); 
         Log.d(Manager.getAppName(), "download ready in " 
             +((float)(System.currentTimeMillis() - startTime)/1000f) 
             + " sec"); 
        } else { 
         Log.d(Manager.getAppName(),"File exists (ignoring)"); 

        } 
       } catch (MalformedURLException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       if (latch!=null){ 
        latch.countDown(); 
        Log.d(Manager.getAppName(),"Download finished "+latch.getCount()+" remaining"); 
       } 
      } 
     }).start(); 

}彼らはスレッドプールの一部である場合

答えて

0

スレッドが死ぬことはありません。あなた自身で始めるのですか?

+0

はい私は何をすべきか手動でスレッドを開始しますか? – ChyBy

+0

'run()'からそれらの部分と関連部分を開始するために使用するコードを提供してください。質問を更新してください。 –

+0

はい、このトピックについて興味がありますので、コードで質問を更新してください。 –

0

これは、AsyncTaskとokhttpのようなライブラリのスレッドプールの正しい動作です。システムによっては、プール内に最大数のスレッドが存在します。新しいスレッドが必要なときはいつでも(新しいAsyncTaskが作成されるときなど)、プールからのアイドリング中のスレッドの1つが使用され、毎回新しいスレッドを作成する際のオーバーヘッドを防ぎます。タスクが終了すると、スレッドは状態 "wait"を持つプールのアイドル状態に戻ります。

関連する問題