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?
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