2012-03-11 3 views
0

그래서 이미지에 맞춤 번호 타일을 사용하고 있습니다. 이미지는 자원으로 저장됩니다. 나는 메모리 누수를 추적 해왔고, 내가 사용하기 위해이 이미지들을 저장하는 방법이 용의주하다는 것을 믿을만한 원인이있다. 현재, 내가이 일을 해요 : I 열고 반복이 응용 프로그램을 종료하면 무슨 일이 일어날 지단기간에 사용할 이미지를 저장하는 모범 사례

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를 정적으로 만들 수 있습니다. 이러한 이미지는 한보기에서 다음보기로 변경되지 않습니다. 비트 맵에는보기가 없으므로 메모리가 잠기지 않습니다. 이미 값을 사용하고 있는지 확인하기 위해 값을 확인하고 있습니다. 그리고이 기능은 너무 자주 사용되어 정적 메모리를 유지하면 프로그램의 다른 측면을 해치지 않습니다. 때로는 단어로 쓰는 것이 도움이됩니다 ..

관련 문제