2015-04-07 66 views
3

在我的應用程序中,我有一個ImageView。在添加之前,該應用程序執行順利。現在它拋出ANRAndroid圖像視圖使應用程序變得緩慢

圖像被保存在數據庫中作爲底座64的編碼串和它被解碼爲位圖,並使用加載到ImageView的:

imageView.setImageBitmap(bitmap); 

bitmap轉化率和施加bitmapImageView所有這些事情是在AsyncTask完成:

class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> { 
    private final WeakReference<ImageView> imageViewReference; 
    private String data = ""; 

    public BitmapWorkerTask(ImageView imageView, String data) { 
     imageViewReference = new WeakReference<ImageView>(imageView); 
     this.data = data; 
    } 


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

     byte[] decodedString = Base64.decode(data, Base64.DEFAULT); 
     BitmapFactory.Options options=new BitmapFactory.Options(); 
     options.inPurgeable = true; 
     Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length, options); 

     return decodedByte; 
    } 

    @Override 
    protected void onPostExecute(Bitmap bitmap) { 
     if (imageViewReference != null && bitmap != null) { 
      final ImageView imageView = imageViewReference.get(); 
      if (imageView != null) { 
       imageView.setImageBitmap(bitmap); 
      } 
     } 
    } 
} 

AsyncTask從使用下面的代碼在主UI調用:

BitmapWorkerTask task = new BitmapWorkerTask(pollWebView,decodedStrings[1]); 
       task.execute(); 

decodedStrings [1]包含base64編碼圖像dataUrl。

此問題的任何解決方案?

+0

位圖的大小是多少? – greenapps

+0

它可以從10 kb到10 MB不等 – Jyothish

回答

3

它讓你的應用程序緩慢的主要問題是的WeakReference刪除它,並嘗試該內部消除

不使用此

private final WeakReference<ImageView> imageViewReference; 

只使用

private final ImageView imageViewReference; 
+0

背後的原因是什麼? – Jyothish

+1

http://developer.android.com/reference/java/lang/ref/WeakReference.html 看看這個並接受它的工作原理。 –

+0

請upvote我的問題 – Jyothish

0

使用下面的代碼壓縮圖像(75%壓縮)

 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     bmp.compress(Bitmap.CompressFormat.JPEG, 75, baos); 
     byte[] imageBytes = baos.toByteArray(); 
     String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT); 
相關問題