2012-06-08 19 views
9

Yaklaşık 50 web görüntülemesi yüklemek için bir görüntüleyici kullanıyorum ... Tüm web görüntülemeleri her assest'e yüklenir ve her görüntülemede her biri yaklaşık 70 görüntüye erişen bir HTML sayfası vardır. app 30 sayfadan sonra çöküyor, web sayfalarının bir kısmı hala assests klasöründeki resimlere referans göstermeye devam ediyor ... Viewpager'ın o saatte kullanmadığı web görünümlerini yayınlamanın bir yolu var mı?Viewpager Webview bellek sorunu

awesomePager.setAdapter(new AwesomePagerAdapter(this, webviewdata)); 

Detayları:

Android WebView Memory Leak when loading html file from Assets 
Failed adding to JNI local ref table (has 512 entries) 
"Thread-375" prio=5 tid=15 RUNNABLE 

dinamik viewpager üzerinde web görüntülemesini yüklenirken

Logcat: Zaman Bitmap bitmap.Most küçültün enter image description here

cevap

1

deneyin bir ana nedenidir biz Bellek sorunu olsun. Ayrıca bitmaplerin nasıl geri dönüştürüleceğini de öğrenin. Takip eden snippet size yardımcı olacaktır. Ayrıca aşağıdaki yöntemi geçersiz kıldığınızdan emin olun. Ayrıca, aşağıdaki yöntemi geçersiz kıldığınızdan emin olun.

@Override 
public void destroyItem(View collection, int position, Object view) { 
    ((ViewPager) collection).removeView((TextView) view); 
} 

Yoksa Bitmap

private byte[] resizeImage(byte[] input) { 

    if (input == null) { 
     return null; 
    } 

    Bitmap bitmapOrg = BitmapFactory.decodeByteArray(input, 0, input.length); 

    if (bitmapOrg == null) { 
     return null; 
    } 

    int height = bitmapOrg.getHeight(); 
    int width = bitmapOrg.getWidth(); 
    int newHeight = 250; 

    float scaleHeight = ((float) newHeight)/height; 

    // creates matrix for the manipulation 
    Matrix matrix = new Matrix(); 
    // resize the bit map 
    matrix.postScale(scaleHeight, scaleHeight); 

    // recreate the new Bitmap 
    Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, 
      width, height, matrix, true); 

    bitmapOrg.recycle(); 

    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    resizedBitmap.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos);    

    resizedBitmap.recycle(); 

    return bos.toByteArray();    
}  
+1

Soln için teşekkürler, ama yukarıdaki soru webview için !!! –

+1

@Vipul Evet, hâlâ şansım yok. – Kiran

0

WebView JNI ile çalışır ve bu sadece 512 yerel referanslar, doğrudan web'den içerik yüklemeyi deneyin tutabilir ve problem olmamalı Aşağı Ölçek için bir işlevi oluşturabilir meydana gelmez.

Bu sorunu, webviewclient numaralı telefondan shouldInterceptRequest(WebView view, String url) geçersiz kıldığımda alıyorum ve kendi yerel önbelleğe alma mekanizmamdan yerel referansları el ile verin.

Bu, web görünümünün kendisinde bir hata olabilir. En azından bana sorarsan nasıl davranması gerektiği değil.

0

Yazılım çalışmalarına katman katmanı web görünümünün ayarlanması.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
} 

Ancak şimdi donanım hızlandırmayı kaybediyorsunuz ve web sayfanız yavaşlayabilir.