2012-03-11 14 views
0

画像にカスタムタイルを使用しています。画像はリソースとして保存されます。私はメモリリークをトレースしており、これらのイメージを使用して保存しているメソッドが疑わしいと信じる原因があります。現在、私はこれをやっている:私は開いて、繰り返しこのアプリケーションを終了した場合どうなりますか短期間で使用する画像を保存するためのベストプラクティス

private void loadImageList() 
{ 
    Log.d(TAG,"Reloading List "+imageList); 
    if (imageList==null || imageList.size()<10) 
    { 
     imageList=new ArrayList<Bitmap>(10); 
     imageList.add(0,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number0)); 
     imageList.add(1,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number1)); 
     imageList.add(2,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number2)); 
     imageList.add(3,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number3)); 
     imageList.add(4,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number4)); 
     imageList.add(5,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number5)); 
     imageList.add(6,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number6)); 
     imageList.add(7,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number7)); 
     imageList.add(8,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number8)); 
     imageList.add(9,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number9)); 
    } 
} 

public void onStart() 
{ 
    super.onStart(); 

    loadImageList(); 

} 

があり、その後、システムはImageListに画像を追加するための十分なメモリを持っていません。私はこのようなボタンのイメージを設定しています(しかし、オブジェクトImageButtonを使用します)。私は、アプリケーションがスレッド化されていることを追加する必要がありますし、この呼び出しは、私がonStop()コマンドで画像を削除しようとしましたrunOnUiThread(Runnable)

ImageButton.setImageBitmap(imageList.get(current_var)); 

に存在しますが、スレッドは画像を割り当てようとするとき、それは時々クラッシュの原因となります獣のスレッドの性質のために、メモリにボタンに格納されている。

したがって、メモリリークの原因にならないこれらのイメージを読み込むことができますか?

答えて

0

私はこれを投稿してから何かを実現しました。 imageListを静的にすることができます。これらの画像はあるビューから次のビューに変わることはありません。ビットマップにはビューが含まれていないため、メモリはロックされません。私はすでに私がそれらを使用している前に値が存在するかどうかをチェックしています。また、この機能は非常に頻繁に使用され、静的なメモリを保持してもプログラムの他の面を害することはありません。ときにはそれだけで言葉にそれを置くのに役立ちます..

関連する問題