2011-08-24 3 views
1

Google지도 API를 사용하는 앱을 개발 중입니다. 두 가지 유형의 방향 (세로 및 가로) 모두를 처리 할 수있는 두 개의 개별 레이아웃을 개발했습니다. 아주 이상한 버그가있는 것을 제외하고는 모든 것이 잘 작동합니다.Android 앱이 방향 변경시 오류없이 중지합니다.

때로는 세로에서 가로로 또는 그 반대로 휴대 전화를 뒤집을 때 앱이 닫히기도합니다. 화면에 오류가 표시되지 않습니다. Logcat에는 예외가 없습니다. 마치 앱이 단순히 finish()을 호출하고 종료하는 것처럼 보인다 (어느 곳에서도 프로그램에 없다). 나는 또한 회전에 어떤 상태도 저장하려고하지 않고있다. 그래서 현재로서는 앱이 효과적으로 다시 시작된다. 때로는 이런 일이 일어나기 전에 50 번 뒤집기도하고 때로는 두 번 뒤집기도합니다. Android Screen Orientation Change Causes App To Quit

정말 전혀 도움이되지 않습니다 :이 문제에서 찾을 수

유일한 것은 이것이다.

그러나 정상적인 로그에 하나의 커다란 메시지가 나타납니다. 그것의 모습에서

I/DEBUG (24223): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
I/DEBUG (24223): Build fingerprint: 'sprint/htc_supersonic/supersonic/supersonic:2.2/FRF91/294884:user/release-keys' 
I/DEBUG (24223): pid: 24329, tid: 24329 >>> ---name of my package--- <<< 
I/DEBUG (24223): signal 11 (SIGSEGV), fault addr 00000000 
I/DEBUG (24223): r0 005003d0 r1 00000000 r2 00000000 r3 005003f4 
I/DEBUG (24223): r4 005003d0 r5 00000000 r6 00000000 r7 00000000 
I/DEBUG (24223): r8 be8ae130 r9 4187369c 10 41873688 fp be8ae478 
I/DEBUG (24223): ip 005003d0 sp be8adef8 lr 00000000 pc ab14b0e4 cpsr 60000010 
I/DEBUG (24223): d0 6472656767756265 d1 6f6c6c6120737562 
I/DEBUG (24223): d2 6f6f74206e6f6979 d3 6620656772616c74 
I/DEBUG (24223): d4 0000000044340000 d5 4448000044340000 
I/DEBUG (24223): d6 3fc000003fc00000 d7 4080000080000000 
I/DEBUG (24223): d8 000002d044961000 d9 0000000000000000 
I/DEBUG (24223): d10 0000000000000000 d11 0000000000000000 
I/DEBUG (24223): d12 0000000000000000 d13 0000000000000000 
I/DEBUG (24223): d14 0000000000000000 d15 0000000000000000 
I/DEBUG (24223): d16 00000000460b1918 d17 bff0000000000000 
I/DEBUG (24223): d18 3ff0000000000000 d19 0000000000000000 
I/DEBUG (24223): d20 0000000000000000 d21 0000000000000000 
I/DEBUG (24223): d22 3ff0000000000000 d23 0000000000000000 
I/DEBUG (24223): d24 3ff0000000000000 d25 0000000000000000 
I/DEBUG (24223): d26 0000000000000000 d27 0000000000000000 
I/DEBUG (24223): d28 0008000a00050002 d29 0003000b000d0009 
I/DEBUG (24223): d30 001f001f001f001f d31 001f001f001f001f 
I/DEBUG (24223): scr 68000012 
I/DEBUG (24223): 
I/DEBUG (24223):   #00 pc 0004b0e4 /system/lib/libskia.so 
I/DEBUG (24223):   #01 pc 0004b1a8 /system/lib/libskia.so 
I/DEBUG (24223):   #02 pc 0006896c /system/lib/libskia.so 
I/DEBUG (24223):   #03 pc 0006434c /system/lib/libskia.so 
I/DEBUG (24223):   #04 pc 0004f7c0 /system/lib/libandroid_runtime.so 
I/DEBUG (24223): 
I/DEBUG (24223): code around pc: 
I/DEBUG (24223): ab14b0c4 e1500001 e92d4070 e1a05001 e1a04000 
I/DEBUG (24223): ab14b0d4 0a00001a e1a06005 ebffff9f e1a0c004 
I/DEBUG (24223): ab14b0e4 e8b6000f e8ac000f e8b6000f e8ac000f 
I/DEBUG (24223): ab14b0f4 e8960003 e88c0003 e5950004 e3500000 
I/DEBUG (24223): ab14b104 0a000001 e2800004 ebff7655 e5950000 
I/DEBUG (24223): 
I/DEBUG (24223): code around lr: 
I/DEBUG (24223): 
I/DEBUG (24223): stack: 
I/DEBUG (24223):  be8adeb8 afd4372c /system/lib/libc.so 
I/DEBUG (24223):  be8adebc 0000003b 
I/DEBUG (24223):  be8adec0 005003c8 [heap] 
I/DEBUG (24223):  be8adec4 00000000 
I/DEBUG (24223):  be8adec8 be8ae130 [stack] 
I/DEBUG (24223):  be8adecc 4187369c 
I/DEBUG (24223):  be8aded0 41873688 
I/DEBUG (24223):  be8aded4 afd0c737 /system/lib/libc.so 
I/DEBUG (24223):  be8aded8 005003d0 [heap] 
I/DEBUG (24223):  be8adedc 00000000 
I/DEBUG (24223):  be8adee0 00000000 
I/DEBUG (24223):  be8adee4 ab14af6c /system/lib/libskia.so 
I/DEBUG (24223):  be8adee8 005003d0 [heap] 
I/DEBUG (24223):  be8adeec 00000000 
I/DEBUG (24223):  be8adef0 df002777 
I/DEBUG (24223):  be8adef4 e3a070ad 
I/DEBUG (24223): #00 be8adef8 005003d0 [heap] 
I/DEBUG (24223):  be8adefc be8adf5c [stack] 
I/DEBUG (24223):  be8adf00 00000000 
I/DEBUG (24223):  be8adf04 ab14b1ac /system/lib/libskia.so 
I/DEBUG (24223): #01 be8adf08 005003c8 [heap] 
I/DEBUG (24223):  be8adf0c ab168970 /system/lib/libskia.so 
I/DEBUG (24223): debuggerd committing suicide to free the zombie! 
I/DEBUG (24516): debuggerd: Dec 8 2010 19:11:01 
I/BootReceiver( 114): Copying /data/tombstones/tombstone_08 to DropBox (SYSTEM_TOMBSTONE) 
I/ActivityManager( 114): Process --- name of my package --- (pid 24329) has died. 
D/Zygote ( 63): Process 24329 terminated by signal (11) 
E/ActivityManager( 114): fail to set top app changed! 
D/Sensors ( 114): close_akm, fd=122 
I/UsageStats( 114): Unexpected resume of com.htc.launcher while already resumed in --- name of my package --- 
W/InputManagerService( 114): Got RemoteException sending setActive(false) notification to pid 24329 uid 10109 

, 내 응용 프로그램은 메모리 주소 00000000 액세스를 시도하고 segmant 오류를 던지고있다.

HTC Evo 4G에서 Android 2.2를 실행 중입니다. 아직 다른 하드웨어에서 앱을 테스트 할 수 없었지만 왜 충돌이 발생 하는지를 알고 싶습니다.

편집 :

나는 에뮬레이터에서 테스트를 실행. 자, 비트 맵을로드하기위한 OutOfMemory 예외가 발생합니다. 프로그래밍 방식으로 두 비트 맵만로드합니다. 다른 모든 것은 xml을 통해 이루어진다. 메인 레이아웃을 팽창 할 때 충돌 것 같다, 그래서 내 활동의

E/AndroidRuntime( 613): FATAL EXCEPTION: main 
E/AndroidRuntime( 613): java.lang.RuntimeException: Unable to start activity ComponentInfo{---package name---/-- activity name ---}: android.view.InflateException: Binary XML file line #19: Error inflating class <unknown> 
E/AndroidRuntime( 613):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
E/AndroidRuntime( 613):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
E/AndroidRuntime( 613):  at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3815) 
E/AndroidRuntime( 613):  at android.app.ActivityThread.access$2400(ActivityThread.java:125) 
E/AndroidRuntime( 613):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2037) 
E/AndroidRuntime( 613):  at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime( 613):  at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime( 613):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
E/AndroidRuntime( 613):  at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime( 613):  at java.lang.reflect.Method.invoke(Method.java:521) 
E/AndroidRuntime( 613):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
E/AndroidRuntime( 613):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
E/AndroidRuntime( 613):  at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime( 613): Caused by: android.view.InflateException: Binary XML file line #19: Error inflating class <unknown> 
E/AndroidRuntime( 613):  at android.view.LayoutInflater.createView(LayoutInflater.java:513) 
E/AndroidRuntime( 613):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
E/AndroidRuntime( 613):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563) 
E/AndroidRuntime( 613):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) 
E/AndroidRuntime( 613):  at android.view.LayoutInflater.inflate(LayoutInflater.java:407) 
E/AndroidRuntime( 613):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
E/AndroidRuntime( 613):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
E/AndroidRuntime( 613):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198) 
E/AndroidRuntime( 613):  at android.app.Activity.setContentView(Activity.java:1647) 
E/AndroidRuntime( 613):  at --- activity name ---.onCreate(--- activity name ---.java:92) 
E/AndroidRuntime( 613):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
E/AndroidRuntime( 613):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
E/AndroidRuntime( 613):  ... 12 more 
E/AndroidRuntime( 613): Caused by: java.lang.reflect.InvocationTargetException 
E/AndroidRuntime( 613):  at android.widget.RelativeLayout.<init>(RelativeLayout.java:170) 
E/AndroidRuntime( 613):  at java.lang.reflect.Constructor.constructNative(Native Method) 
E/AndroidRuntime( 613):  at java.lang.reflect.Constructor.newInstance(Constructor.java:446) 
E/AndroidRuntime( 613):  at android.view.LayoutInflater.createView(LayoutInflater.java:500) 
E/AndroidRuntime( 613):  ... 23 more 
E/AndroidRuntime( 613): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
E/AndroidRuntime( 613):  at android.graphics.Bitmap.nativeCreate(Native Method) 
E/AndroidRuntime( 613):  at android.graphics.Bitmap.createBitmap(Bitmap.java:468) 
E/AndroidRuntime( 613):  at android.graphics.Bitmap.createBitmap(Bitmap.java:435) 
E/AndroidRuntime( 613):  at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340) 
E/AndroidRuntime( 613):  at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:488) 
E/AndroidRuntime( 613):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:462) 
E/AndroidRuntime( 613):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:323) 
E/AndroidRuntime( 613):  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697) 
E/AndroidRuntime( 613):  at android.content.res.Resources.loadDrawable(Resources.java:1709) 
E/AndroidRuntime( 613):  at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 
E/AndroidRuntime( 613):  at android.view.View.<init>(View.java:1885) 
E/AndroidRuntime( 613):  at android.view.View.<init>(View.java:1834) 
E/AndroidRuntime( 613):  at android.view.ViewGroup.<init>(ViewGroup.java:285) 
E/AndroidRuntime( 613):  ... 27 more 

선 (92)는 setContentView(R.layout.main)입니다. 배경에 사용하는 비트 맵을로드하는 데 문제가 있습니다. 비트 맵의 ​​메모리를 덤프하거나 다시 사용하려면 어떻게해야합니까? 나는 프로그램에서 이들을 제어하지 않으므로 안드로이드에서 자동으로 자동화됩니다.

+0

시뮬레이터에서 앱 실행을 시도 했습니까? – Bill

+0

Odd. 시뮬레이터에서 실행할 때 'OutOfMemoryError : VM 크기를 초과하는 비트 맵 크기'오류가 발생합니다. 'getResources(). getDrawable()'호출에서 두 비트 맵을 얻는다. recycle()을 호출하고 GC에 대한 참조를 null로 설정하더라도 여전히 발생합니다. 그것은 내가 xml 레이아웃에서 사용하는 비트 맵을 할당하고 오리 엔테이션을 무료로하지 않는 것 같습니다. 에뮬레이터 오류로 편집하겠습니다. – DeeV

답변

2

libskia.so으로 오류가 발생했습니다. similar error에 대한이 스레드를 참조하십시오. 메모리가 부족하면 오류가 발생하는 것 같습니다.

어떻게 리소스를로드합니까? 이미지? 오리 엔테이션 변경시 Activity가 다시 생성되고 모든 자원이 일반적으로 다시로드됩니다. 이미지를 캐싱 해보지 만, beware of memory leaks (즉, 드로어 블이 아닌 캐시 비트 맵).

업데이트

그래서이 이미지 로딩에 의해 트리거 될 것으로 보인다. 또한 Google지도는 많은 이미지 (지도 타일)를 다운로드하고 인스턴스화하여 악화시킬 수 있습니다.

이미지가 너무 큰 경우 scale it when loading으로 시도해보십시오.

onRetainNonConfigurationInstance/getLastNonConfigurationInstance ~ cache bitmaps for faster loading and less memory usage도 사용하십시오.

업데이트 : 또한

, 큰 이미지가 문제가 팽창으로가 화면에 나타나는대로 적절한 크기의 XML 파일에 사용되는 이미지.

+0

전체 앱 사용을 위해 두 비트 맵만 수동으로로드합니다. 나는 그들을 onPause()에서 가비지 콜렉션을 위해 덤프하고 stil이 발생한다. 내 편집에 대한 자세한 설명. – DeeV

+0

답장을 보내 주셔서 감사합니다. 그 트릭을 시도했지만 문제는 여전히 남아 있습니다. 문제는 실제로 이전의 부풀어 오른 레이아웃에서 비트 맵을 정리하지 않는다는 것입니다. – DeeV

관련 문제