2013-04-07 2 views
0

이 코드는 충돌합니다. 왜?치명적인 예외 asynctask # 2 doInBackground

@Override 
    protected String doInBackground(String... params) { 

     try { 
      image_compress = image_compress(changed_image); 

      array_image.add(Effects_change.doColorFilter((image_compress), 0, 
        1, 0)); 
      array_image.add(Effects_change.doColorFilter((image_compress), 0, 
        0, 1)); 


      array_image.add(Effects_change.doColorFilter((image_compress), 0, 
        1.2, 1.8)); 

      array_image.add(Effects_change.doGreyscale(image_compress)); 
      array_image.add(Effects_change.doGamma((image_compress), 0.8, 0.8, 
        0.8)); 
      array_image.add(Effects_change.doGamma((image_compress), 1.8, 1.8, 
        1.8)); 
      array_image.add(Effects_change.doColorFilter((image_compress), 1.0, 
        0, 0)); 

      array_image.add(Effects_change.doColorFilter((image_compress), 0.5, 
        0.5, 0.5)); 
      array_image.add(Effects_change.doColorFilter((image_compress), 1.5, 
        1.5, 1.5)); 


      array_image.add(Effects_change.createSepiaToningEffect(
        (image_compress), 100, 1.5, 0.6, 0.12)); 
      array_image.add(Effects_change.createSepiaToningEffect(
        (image_compress), 100, 0.88, 1.45, 1.43)); 

      array_image.add(Effects_change.createSepiaToningEffect(
        (image_compress), 100, 1.2, 0.87, 1.8)); 
      array_image.add(Effects_change.decreaseColorDepth((image_compress), 
        32)); 

      array_image.add(Effects_change.decreaseColorDepth((image_compress), 
        120)); 

      array_image.add(Effects_change.applyReflection(image_compress)); 
      //array_image.add(Effects_change.applynewReflection(image_compress)); 
      array_image.add(Effects_change.applyFleaEffect(image_compress)); 

      array_image.add(Effects_change.sharpen((image_compress), 15)); 



      array_image.add(Effects_change.createSepiaToningEffect(
        (image_compress), 200, 0.50, 0.6, 0.20)); 
      array_image.add(Effects_change.createSepiaToningEffect(
        (image_compress), 150, 1.2, 0.97, 2.1)); 

      array_image.add(Effects_change.applyGaussianBlur(image_compress)); 
      array_image.add(Effects_change.applyBlackFilter(image_compress)); 
      array_image.add(Effects_change.applyMeanRemoval(image_compress)); 

      array_image.add(Effects_change.applySnowEffect(image_compress)); 

      array_image.add(Effects_change.smooth((image_compress), 8)); 
      array_image.add(Effects_change.CharcoalEffect(image_compress)); 

      array_image.add(Effects_change.tintImage((image_compress), 80)); 
      array_image.add(Effects_change.roundCorner((image_compress), 45)); 

      array_image.add(Effects_change.boost((image_compress), 1, 
        (float) 1.5)); 
      array_image.add(Effects_change.boost((image_compress), 2, 
        (float) 0.30)); 
      array_image.add(Effects_change.boost((image_compress), 3, 
        (float) 0.67)); 
      array_image.add(Effects_change.emboss(image_compress)); 

      array_image.add(Effects_change.boost((image_compress), 1, 
        (float) .50)); 

      array_image.add(Effects_change.boost((image_compress), 2, 
        (float) 0.10)); 
      array_image.add(Effects_change.boost((image_compress), 3, 
        (float) 1.5)); 
      array_image.add(Effects_change.engrave(image_compress)); 
      array_image.add(Effects_change.applyHueFilter((image_compress), 3)); 

      array_image.add(Effects_change 
        .changeToNegativeEffect(image_compress)); 
      array_image.add(Effects_change.SketchImage(image_compress)); 

      array_image.add(Effects_change.doColorFilter(image_compress, 1.8, 1.2, 1)); 


      array_image.add(Effects_change.tintImage((image_compress), 180)); 

      array_image.add(Effects_change.applySaturationFilter(image_compress, 2)); 

      array_image.add(Effects_change.createContrast(image_compress, 100)); 

      array_image.add(Effects_change.applySaturationFilter((image_compress), 90)); 
      // array_image.add(Effects_change.posterize(image_compress, 10)); 

      // setProgress(""+(int)((total*100)/lenghtOfFile)); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     //array_image.add(Effects_change.setSepiaColorFilter(image_compress)); 

     return null; 
    } 

    @Override 
    public void onPostExecute(String result) { 
     super.onPostExecute(result); 

     g.setAdapter(new ImageAdapter(Image_add_effects.this)); 
     g.setOnItemSelectedListener(Image_add_effects.this); 

     try { 
      pb.dismiss(); 
      pb=null; 
     } catch (Exception e) { 
      // TODO: handle exception 
     } 
    } 

} 

이 로그

04-07 22:36:08.450: W/dalvikvm(18429): threadid=13: thread exiting with uncaught exception(group=0x41fe82a0) 
04-07 22:36:08.450: E/AndroidRuntime(18429): FATAL EXCEPTION: AsyncTask #2 
04-07 22:36:08.450: E/AndroidRuntime(18429): java.lang.RuntimeException: An error occured while executing doInBackground() 
04-07 22:36:08.450: E/AndroidRuntime(18429): at android.os.AsyncTask$3.done(AsyncTask.java:299) 
04-07 22:36:08.450: E/AndroidRuntime(18429): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
04-07 22:36:08.450: E/AndroidRuntime(18429): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
04-07 22:36:08.450: E/AndroidRuntime(18429): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
04-07 22:36:08.450: E/AndroidRuntime(18429): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
04-07 22:36:08.450: E/AndroidRuntime(18429): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
04-07 22:36:08.450: E/AndroidRuntime(18429): at java.lang.Thread.run(Thread.java:856) 
04-07 22:36:08.450: E/AndroidRuntime(18429): Caused by: java.lang.OutOfMemoryError 

이다 나는이 문제를 어떻게 해결할 수 있습니까?

답변

0

이유는 java.lang.OutOfMemoryError입니다. 계산이 너무 많은 RAM을 먹는 것을 의미합니다.

그러나 무엇을하는지 모르는 상태에서 정확하게 오류의 원인을 밝히기 란 어렵습니다. 아마도 너무 많은 이미지/비트 맵을 생성 할 수 있습니다. 조사 https://stackoverflow.com/a/9940415/247013

아이디어 : 여기

는 앱 availiable 얼마나 RAM에 대한 정보입니다

  • Bitmap.recycle()의 메이크업 사용 - 당신이 처리 된 비트 맵이 필요하지 않습니다 때마다 전화
  • 이미지를 RAM에 저장하지 말고 파일에 계속 저장하십시오.
  • 미리 가능한 효과가있는 이미지를 미리 만들려고하는 것처럼 보입니다. 다시 아키텍처를 고려하십시오. 사용자가 명시 적으로 요청할 때만 (요청시).
+0

고맙습니다. 비트 맵 이미지의 크기에 따른 문제를 고맙게 생각합니다. –

관련 문제