2013-03-19 1 views
1

Android 4.0.2에서 4.1.2로 업그레이드 한 후 자체 제작 한 앱이 더 이상 작동하지 않습니다.갤럭시 S2의 Android 업데이트 이후 메모리 부족 메모리

사진을 촬영할 때 콜백 데이터로 비트 맵을 만들어야합니다. 비트 맵 명령 중에 메모리 부족 오류가 발생합니다.

나는 구글 월호에 비슷한 문제를 발견했습니다 http://code.google.com/p/android/issues/detail?id=42516

난 그냥 몇 가지 실험을이 문제에 달려 만들어 내 결론 :

- 당신은 어떤 드로어 블을 설정할 수 있습니다 ( 된 setContentView를 사용하지 않는 것이 대신 사용 위해 LayoutInflater 인플레이터 = LayoutInflater.from getApplicatio을 : 또는 XML 색상 및 활동

수정에게 누출 그렇게, 된 setContentView에 적용 nContext());

inflater.inflate(R.layout.activity_frontpage, (ViewGroup) findViewById(android.R.id.content), true); 

그래서 나는 수정을 시도,하지만 나를 위해 작동하지 않습니다. 화면이 검은 색으로 유지되고 카메라 오류 -1 예외가 발생합니다.

public class ScanCallback implements PictureCallback { 

    MainActivity mainActivity; 
    private boolean savePicture = false; 

    public ScanCallback(MainActivity mainActivity) { 
     this.mainActivity = mainActivity; 
    } 

    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 
     Bitmap bitmapPicture = BitmapFactory.decodeByteArray(data, 0, 
       data.length); 
     Bitmap redrawn = bitmapPicture.copy(bitmapPicture.getConfig(), true); 

     mainActivity.mCamera.startPreview(); 

     MainActivity.waitForCallback = false; 

    } 
} 

그리고 내 메인은 Activity.onCreate : 그것에 대해이야

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 

     mPreview = new CameraView(this); 

     mainActivity = this; 

     scanCallback = new ScanCallback(); 

     getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

//  setContentView(mPreview); 
     LayoutInflater inflater = LayoutInflater.from(getApplicationContext()); 
     inflater.inflate(R.layout.activity_main, 
//    (ViewGroup) findViewById(android.R.id.content), true); 


     setProgressBarIndeterminateVisibility(false); 
    } 

여기 내 콜백입니다. 다른 코드를보고 싶다면 알려주십시오.

수정 프로그램을 실행하는 방법에 대한 아이디어가 있으십니까? 또는 처음에 오류를 피하는 방법은 무엇입니까?

+0

전체 사진을 찍어야합니까? 비트 맵을 다운 샘플링 할 수 있습니다. –

+0

사진에서 6 개의 200x200 정사각형이 필요합니다. 나머지는 다운 샘플링 할 수 있습니다. – Josch

+0

다운 샘플링 또는 거대한 비트 맵을 더 작은 비트 맵으로 분해하고 하나씩 처리하여 효율적인 비트 맵 처리를 살펴보십시오. –

답변

1

당신은 당신이 특히 당신은 그들이 작은 있도록 비트 맵을 다운 샘플링 또는 더 큰 하나에서 여러 개의 작은 비트 맵을 생성하고 하나 하나를로드 할 수 있습니다 필요에 따라 Displaying Bitmaps EfficientlyLoading Large Bitmaps Efficiently

에서 살펴 이상이 있어야합니다. 그래서 당신은 그렇게 많은 기억을 사용하지 않습니다.