2012-11-22 13 views
5

Uygulamamın birçok etkinliğinde animationdrawables kullanıyorum.AnimationDrawable'dan ücretsiz bellek

Sonra
public void prepareVideo (int resourceBall, String animation, int width, int height){ 

    imgBall = (ImageView)findViewById(resourceBall); 
    imgBall.setVisibility(ImageView.VISIBLE); 
    String resourceNameAnimation = animation; 
    int id_res = getResources().getIdentifier(resourceNameAnimation, "drawable", getPackageName()); 
    imgBall.setBackgroundResource(id_res); 
     LayoutParams latoutFrame = imgBall.getLayoutParams(); 
    latoutFrame.width = width; 
    latoutFrame.height = height; 
    imgBall.setLayoutParams(latoutFrame); 
    frame = (AnimationDrawable) imgBall.getBackground(); 


} 

i çağırır: Bu onları inicializate için kodudur imgBall.post (yeni StartAnimation());

bir çalıştırılabilir çağrı

:

class StartAnimation implements Runnable { 

    public void run() { 

frame.start(); 

    } 

} 

sorunudur aynı XML (kare kare) kullanan birçok animasyonlar kullanmaktır. Aynı animasyonu olan birçok etkinlikte bu yöntemi çağırmak zorundayım. Sonunda outofmemoryerror olsun. Ben ekranlar arasında bellekte yer çalışıyorum: "geri dönüştürülmüş bit eşlem kullanmak çalışılıyor"

Herkes başka bir yol biliyorum:

for (int i = 0; i < frame.getNumberOfFrames(); ++i){ 
    Drawable frame_rescue = frame.getFrame(i); 
    if (frame_rescue instanceof BitmapDrawable) { 
     ((BitmapDrawable)frame_rescue).getBitmap().recycle(); 
    } 
    frame_rescue.setCallback(null); 

sorun tekrar bir resourde kullanmaya çalıştığınızda y diğer hata alıyorum olmasıdır boş hafıza

cevap

0

Aynı sorunu yaşadım, sorun runnable idi. Animasyonla yapılan her animasyona bağımsız bir iş parçacığı oluşturmaKullanıcıları, etkinliği yok ettikten ve görünümleri ve geri bildirimleri temizledikten sonra devam eder. Dolayısıyla, bağımsız iş parçacıkları olmadan animasyon başlatma, GC'nin kullanılmayan kaynakları toplamasını sağlar.