[問題] 不同版本的android, App 產生 Unable to resume Activity
※ [本文轉錄自 Android 看板 #1GM9LQSS ]
作者: roden (Roden) 看板: Android
標題: [開發] 在不同版本的androidAPP相同性問題
時間: Tue Sep 18 23:38:00 2012
Hi 板上的各位好。
想請問一下,
小弟寫了一個Android的app,
功能是介面上有個按鈕,
按鈕被按下後,會startActivityForResult
執行zxing(Google的barcode reader)掃瞄條碼,
掃描後,我的app裡撰寫了onActivityResult去接收和處理掃描到的檔案。
此APP在Desire(A8181) Android v2.2.2上執行良好。
不曾發生過錯誤,
但如果安裝到 Android 2.3 或 4.0.4版本的手機上。
就發生錯誤。
這錯誤發生時機是:
每當ZXING掃描完條碼後,
回到APP的視窗,就跑出APP強制關閉的畫面。
錯誤是:
java.lang.RuntimeException: Unable to resume activity
版本差異導致此問題?
因為本人有將class裡的member變數印出來。
在呼叫startActivity之前,member變數是有資料。
但是在onActivityResult時,卻memeber變數變成null。
是否Activity被destory?
這問題困擾小弟許久,起初還以為是手機是雜牌的問題。
可以請問板上各位先進,小弟哪邊需要做改進才能讓APP相容於較新的版本?
資訊若不足,再請告知我一下。
以下是將按鈕加上Listener的片段及startActivityForResult的方法,
已去除不相關的程式碼。
希望能有先進提供解決的方法或一起討論。
謝謝各位
以下為程式碼。
http://pastebin.com/6HfZQUx8
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 106.65.41.232
→
09/18 23:42, , 1F
09/18 23:42, 1F
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 轉錄者: roden (106.65.41.232), 時間: 09/18/2012 23:48:54
→
09/19 08:15, , 2F
09/19 08:15, 2F
→
09/19 09:45, , 3F
09/19 09:45, 3F
→
09/19 12:20, , 4F
09/19 12:20, 4F
推
09/19 18:56, , 5F
09/19 18:56, 5F
→
09/19 18:56, , 6F
09/19 18:56, 6F
→
09/19 22:46, , 7F
09/19 22:46, 7F
推
09/19 23:50, , 8F
09/19 23:50, 8F
CURRENTPAGE是在網頁換頁後馬上賦值。現在發現是parent
Activity整個被gc,因為在onActivityResult呼叫前有執行
onCreate。這應該是ram不夠導致。但就算是把變數存到SharePreference
裡,也許能保存下來。
但是layout中的webview就算recreate後,
他本身的session id 也會有差異。
因為我在舊的Webview中已經有登入的record,
這樣我將掃描到的資訊送到網站後,
他會在要求我在登入一次。
有先進有遇過這問題嘛?
希望能夠強制把parent activity給保留下來。
或者能提供一些solution給我呢?
--------------------------------------------
2012/09/22 Solved
問題已經解決了。
原本我APP是去呼叫外部的ZXING,
也就是說是我沒將ZXING包在自己的APP。
雖然ZXING包不包在自己的APP裡,
在使用startActivityForResult都能呼叫成功。
但對於作業系統有一個很大的差異。
在沒將ZXING(外部程式)包進APP(Parent APP)的狀況下,
由於作業系統會認為你的APP(Parent APP)是去呼叫外部程式,
於是,當APP運行在手機規格差的環境上,
在記憶體不足的狀況下,
OS會將其他的Activity(包含Parent APP)GC掉。
等到ZXING(外部程式)運行完畢,
再執行parent APP 的 onActivityResult時,
由於OS知道parent APP不存在,
故會去呼叫onCreate將parent APP建立起來,
這樣的話,原本的global variable也會化為初始值。
進而導致可能有一些exception發生。
若將ZXING(外部程式)包在APP裡,
在記憶體不足的環境下,
作業系統會認為我的APP(Parent APP)和ZXING(外部程式)是同一個程式,
它會優先將其他的ActivityGC掉,
但GC完後,記憶體仍然不足,
作業系統仍將會跳出整個APP。
這樣就只能請使用者換手機拉。
若有其他先進有不同的看法或意見,也歡迎一起討論!
※ 編輯: roden 來自: 39.8.11.82 (09/22 23:57)