[問題] 不同版本的android, App 產生 Unable to resume Activity

看板AndroidDev作者 (Roden)時間13年前 (2012/09/18 23:48), 編輯推噓2(205)
留言7則, 4人參與, 最新討論串1/1
※ [本文轉錄自 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
左轉 AndroidDev
09/18 23:42, 1F
※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: roden (106.65.41.232), 時間: 09/18/2012 23:48:54

09/19 08:15, , 2F
需要的資訊是Crash時LogCat噴的訊息阿
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
LogCat裡通常會有一行Caused by:xxxExcaption
09/19 18:56, 5F

09/19 18:56, , 6F
下面是發生的位置,這個才是判斷的重點
09/19 18:56, 6F

09/19 22:46, , 7F
猜是gc把某個物件清掉了 從這個方向找吧
09/19 22:46, 7F

09/19 23:50, , 8F
你的CURRENTWEBPAGE是幾時賦值阿?
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)
文章代碼(AID): #1GM9VeUl (AndroidDev)