2010-11-10 9 views
0
private static class asyncDownloadImage extends AsyncTask<Object, Integer, Integer> 
    { 
     Bitmap _image=null; 

     @Override 
     protected Integer doInBackground(Object... params) { 

      String _url=com.nag.online.utils.objectToString(params[0]); 

      byte tries=0; 

      do { 
       _image   = com.nag.online.utils.downloadPicture(_url); 

       try {Thread.sleep(10);} catch (InterruptedException e) { e.printStackTrace(); } 

       tries++; if (tries>utils.TRIES) break; 
      } while (_image==null); 

      final Bitmap _imagex=_image; 

      Runnable r = new Runnable() { 
       public void run() { 
        ImageViewImage.setImageBitmap(_imagex); 
        ImageViewImage.setScaleType(ScaleType.CENTER); 
        ImageViewImage.refreshDrawableState(); 
       }}; 

      handler.post(r); 
      isReady=true; 

      return 0; 
     } 

     @Override 
     protected void onPostExecute(Integer result) { 
      /*if (!_image.isRecycled()) { 
       _image.recycle(); 
       _image=null; 
       System.gc(); 
      }*/ 

      System.gc(); 
     } 
    } 

que je reçois:erreurs d'image de téléchargement Android AsyncTask

11-10 13: 32: 07,057: ERREUR/dalvikvm (4904): Mémoire insuffisante: Tas Taille = 8455KB, Alloué = 5755KB, Bitmap Taille = 7855KB

ou quand je mets cela dans mon code sur "onPostExecute":

if (!_image.isRecycled()) { 
       _image.recycle(); 
       _image=null; 
       System.gc(); 
      } 

puis-je obtenir:

11-10 13: 40: 55,117: E RROR/AndroidRuntime (4981): java.lang.RuntimeException: Canvas: essayer d'utiliser un bitmap recyclé [email protected]

Quelle est la solution pour cela?

+2

Saint-enfer c'est un bordel. N'appelez JAMAIS 'System.gc();'. Toujours, jamais. Deuxièmement, 'handler.post (r); Jésus-Christ, c'est ce que l'asynctask est pour. Faites-le dans onpostexecute. – Falmarri

Répondre

1

Ne pas réinventer la roue.

Quelqu'un l'a déjà fait. Trouvez-le here.

+0

un autre commentaire utilisable? – lacas

Questions connexes