2011-02-07 5 views
0

내 응용 프로그램은 각각 다음과 같이 새로운 의도를 만드는 세 개의 버튼이 있습니다 : 나는 버튼을 클릭하면 내 안드로이드 응용 프로그램이 예기치 않게 중지

Button button3 = (Button) findViewById(R.id.Button03); 
    button3.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      Intent myIntent = new Intent(view.getContext(), Shout.class); 
      startActivityForResult(myIntent, 0); 
     } 

    }); 

그래서 기본적으로 프로젝트 내 다른 클래스를 시작합니다. 첫 번째 화면으로 돌아가고 싶을 때 뒤로 키를 누릅니다. 잘 작동하지만 버튼과 뒤로 키를 약 5 번 누르면 앱이 다운됩니다. 왜? 내가 클래스에서 돌아가 후에도 sensorlistener 여기처럼 최고 속도로 계속 실행 것으로 나타났습니다 :

02-07 16:51:13.034: DEBUG/sensor(5354): onSensorChanged: 2 
02-07 16:51:13.094: DEBUG/sensor(5354): onSensorChanged: 2 
02-07 16:51:13.154: DEBUG/sensor(5354): onSensorChanged: 2 
02-07 16:51:13.214: DEBUG/sensor(5354): onSensorChanged: 2 
02-07 16:51:13.274: DEBUG/sensor(5354): onSensorChanged: 2 
02-07 16:51:13.334: DEBUG/sensor(5354): onSensorChanged: 2 
02-07 16:51:13.394: DEBUG/sensor(5354): onSensorChanged: 2 
02-07 16:51:13.444: INFO/ActivityManager(156): Starting: Intent { cmp=com.bengaard/.Shout } from pid 5354 
02-07 16:51:13.504: DEBUG/sensor(5354): onSensorChanged: 2 
02-07 16:51:13.564: DEBUG/dalvikvm(5354): GC_EXTERNAL_ALLOC freed 394K, 60% free 3179K/7943K, external 24861K/26873K, paused 34ms 
02-07 16:51:13.574: ERROR/dalvikvm-heap(5354): 32980-byte external allocation too large for this process. 
02-07 16:51:13.604: ERROR/GraphicsJNI(5354): VM won't let us allocate 32980 bytes 
02-07 16:51:13.604: DEBUG/dalvikvm(5354): GC_FOR_MALLOC freed <1K, 60% free 3179K/7943K, external 24861K/26873K, paused 21ms 
02-07 16:51:13.614: DEBUG/skia(5354): --- decoder->decode returned false 
02-07 16:51:13.614: DEBUG/AndroidRuntime(5354): Shutting down VM 
02-07 16:51:13.614: WARN/dalvikvm(5354): threadid=1: thread exiting with uncaught exception (group=0x40169560) 
02-07 16:51:13.614: DEBUG/webviewglue(5354): nativeDestroy view: 0x4dc7e0 
02-07 16:51:13.614: DEBUG/webviewglue(5354): nativeDestroy view: 0x47a310 
02-07 16:51:13.614: DEBUG/webviewglue(5354): nativeDestroy view: 0x4339e8 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354): FATAL EXCEPTION: main 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bengaard/com.bengaard.Shout}: android.view.InflateException: Binary XML file line #21: Error inflating class <unknown> 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.os.Looper.loop(Looper.java:123) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.app.ActivityThread.main(ActivityThread.java:3647) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at java.lang.reflect.Method.invoke(Method.java:507) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at dalvik.system.NativeStart.main(Native Method) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354): Caused by: android.view.InflateException: Binary XML file line #21: Error inflating class <unknown> 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.view.LayoutInflater.createView(LayoutInflater.java:518) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.view.LayoutInflater.inflate(LayoutInflater.java:386) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.widget.Toast.makeText(Toast.java:235) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at com.bengaard.Shout.onCreate(Shout.java:57) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  ... 11 more 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354): Caused by: java.lang.reflect.InvocationTargetException 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at java.lang.reflect.Constructor.constructNative(Native Method) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at java.lang.reflect.Constructor.newInstance(Constructor.java:415) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.view.LayoutInflater.createView(LayoutInflater.java:505) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  ... 20 more 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:450) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:326) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.content.res.Resources.loadDrawable(Resources.java:1740) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.view.View.<init>(View.java:1951) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.view.View.<init>(View.java:1899) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.view.ViewGroup.<init>(ViewGroup.java:286) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  at android.widget.LinearLayout.<init>(LinearLayout.java:120) 
02-07 16:51:13.644: ERROR/AndroidRuntime(5354):  ... 23 more 
02-07 16:51:13.674: WARN/ActivityManager(156): Force finishing activity com.bengaard/.Shout 
02-07 16:51:13.674: WARN/ActivityManager(156): Force finishing activity com.bengaard/.OB 
02-07 16:51:14.174: WARN/ActivityManager(156): Activity pause timeout for HistoryRecord{40a5f000 com.bengaard/.Shout} 
02-07 16:51:14.224: ERROR/AK8973(135): Compass driver encountered fatal error2. 

은 메모리 부족 문제처럼 보이지만 내가 어떻게 내려 닫을 수 있습니다 뒤로 버튼을 클릭해도이 문제가 발생하지 않거나 문제에 대한 또 다른 대답이 있습니까? 뒤로 키를 클릭 한 후 Sensor Listener가 중지되지 않는 이유는 무엇입니까? 실례합니다. o)

+0

또한 XML 파일 중 하나에서 21 행으로 런타임 예외가 발생합니다. –

답변

0

당신의보기 중 하나에 비트 맵이 있습니다.이 비트 맵은이보기의 xml을 부풀려서 문제의 비트 맵을 디코딩하려고 할 때 충분히 큽니다. 메모리 오류.

이 드로어 블을 최적화 할 수 있는지 확인하거나 활동의 온 디스트로이어에서 클렌징을 시도하십시오.

+0

도움 주셔서 감사합니다! viewflipper를 사용하여 약 10 개의 이미지를 뒤집습니다. 온 데스 로이 중 어떻게 그 작전을 청소할 수 있습니까? null로 설정하려고했지만 더 좋은 방법이있을 것이라고 확신합니까? – bengaard

+0

이 기사에서 예를 들어 다음 중 하나를 수행하지 않도록하십시오. http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/ and 서가 오픈 소스 Android 애플리케이션에서 드로어 블에 콜백을하지 않는 방법을 확인하십시오. http://code.google.com/p/shelves/source/browse/trunk/Shelves/src/org/curiouscreature /android/shelves/util/ImageUtilities.java 응답을 위해 cleanUpCache 함수 – Yahel

0

센서 리스너를 등록 해제해야합니다 (가급적이면 활동의 onPause() 메소드에서). 그렇지 않으면 시스템에서 참조를 유지하며 가비지 수집을 위해 해제되지 않습니다. 등록 된 리스너가 활동 자체이거나 비트 맵에 대한 직접 또는 간접 참조가있는 다른 것이면 비트 맵은 가비지 콜렉터에 공개되지 않습니다.

+0

을 고맙게 생각합니다. 나는 이것을했다 : protected void onPause() { sensorMgr.unregisterListener (this); viewFlipper = null; finish(); super.onPause(); 그리고 청취자가 멈 춥니 다. o) 그러나 위의 오류와 비슷한 오류가 계속 발생합니다. 02-07 21 : 55 : 05.265 : ERROR/AndroidRuntime (7954) java.lang.OutOfMemoryError와 : 비트 맵 크기가 VM 예산 내가 10 개 이미지를가는 viewflipper을 가지고 있기 때문에 추측을 초과합니다. null로 설정하려고 시도하지만 사용중인 메모리를 확보하고 내 앱이 충돌하는 것을 방지하는 더 나은 방법이있을 것이라고 확신합니다. – bengaard

관련 문제