2012-11-22 15 views
5

Używam animowanych elementów w wielu działaniach mojej aplikacji. Jest to kod do inicializate je:Bezpłatne wspomnienie z AnimationDrawable

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(); 


} 

Potem zadzwoń: imgBall.post (nowa StartAnimation());

które nazywamy uruchamialny:

class StartAnimation implements Runnable { 

    public void run() { 

frame.start(); 

    } 

} 

Problem jest stosowanie wielu animacji, które są wykorzystuje ten sam XML (dla każdej klatki). Muszę nazwać tę metodę w wielu działaniach z tą samą animacją. W końcu dostaję outofmemoryerror. Próbuję wolnej pamięci między ekranami:

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); 

Problemem jest to, że gdy próbuję ponownie użyć resourde y dostać inny błąd: „Próba użycia bitmapę recyklingu”

Ktoś wie inny sposób wolnej pamięci?

Odpowiedz

0

Miałem ten sam problem, problem był możliwy do uruchomienia. Tworzenie niezależnego wątku dla każdej animacji, której animacja zawierałaDokumenty trwały po zniszczeniu działania i wyczyszczeniu widoków i wywołań zwrotnych. W ten sposób uruchamianie animacji bez niezależnych wątków pozwala GC zbierać niewykorzystane zasoby.

Powiązane problemy