0

dans mon application Android J'utilise une activité initiale pour faire un splash de chargement avec une ASyncTask et ensuite lancer la mainactivity qui télécharge environ 10 images et le montre à l'utilisateur dans un tableau. Je viens de commencer aujourd'hui à étudier le DDMS et le mode de débogage et je vois qu'après le chargement de l'application, j'ai un thread pour l'asynctask et 10 threads http en attente. Est-ce normal? Ne devraient-ils pas mourir avec la dernière instruction exécutée?Android Threads en attente

Voici mon code:

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(); 

}

Répondre

0

Threads ne mourra pas si elles font partie d'un pool de threads. Les démarrez-vous vous-même?

+0

oui je commence manuellement les discussions ce que je devrais faire? – ChyBy

+0

Veuillez fournir le code que vous utilisez pour les démarrer et les parties pertinentes de 'run()'. Mettez à jour la question, s'il vous plaît. –

+0

Oui Je suis curieux à ce sujet, s'il vous plaît mettre à jour la question avec votre code. –

0

C'est le comportement correct en tant que AsyncTask et les bibliothèques comme okhttp utilisent le pool de threads. Selon le système, il y aura un nombre maximum de threads qui peuvent être dans le pool. Chaque fois qu'un nouveau thread est nécessaire (comme lors de la création d'une nouvelle AsyncTask), l'un des threads inactifs du pool sera utilisé, évitant ainsi le temps système nécessaire à la création d'un nouveau thread à chaque fois. Une fois la tâche terminée, le thread revient à l'état inactif dans le pool avec le statut "wait".

Questions connexes