2011-08-24 23 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),如此看來,當它膨脹的主要佈局崩潰。加載我用於背景的位圖時遇到問題。如何轉儲位圖的內存或重用它們?我並沒有控制程序中的所有內容,因此它在Android上都是自動執行的。

+0

你有沒有試過在模擬器上運行你的應用程序? – Bill

+0

奇數。當我在模擬器上運行它時,出現'OutOfMemoryError:位圖大小超過虛擬機預算錯誤。我從getResources()。getDrawable()調用了兩個位圖。即使我調用'recycle()'並將它們的引用設置爲null,它仍然會發生。它似乎分配了我在xml佈局中使用的位圖,並且不會將它們放在方向上。我將使用模擬器錯誤進行編輯。 – DeeV

回答

2

看來這個錯誤是由libskia.so產生的。看到這個線程爲similar error。內存不足時似乎會產生錯誤。

您如何加載資源圖片?在方向更改上,Activity會被重新創建,並且所有資源通常會再次加載。嘗試緩存圖片,但是beware of memory leaks(即緩存位圖,不可繪製)。

更新

因此,這似乎是由圖像加載被觸發。 Google地圖還會下載並實例化大量圖片(地圖圖塊),因此這可能會使情況變得更糟。

如果您的圖片非常大,請嘗試scale it when loading

也使用onRetainNonConfigurationInstance/getLastNonConfigurationInstancecache bitmaps for faster loading and less memory usage

更新:

而且,因爲它們出現在屏幕上的圖像更大的膨脹問題,利用圖像在適當大小的XML文件。

+0

我只手動加載兩個位圖來使用整個應用程序。我將它們轉儲到onPause()中進行垃圾收集,並且它仍然存在。更多描述在我的編輯。 – DeeV

+0

感謝您的回覆。我確實嘗試過這些技巧,但問題仍然存在。問題似乎是它從來沒有實際清理以前充氣佈局的位圖。 – DeeV

相關問題