我最近將v4 support lib合併到我的Android應用程序中,以啓用跨選項卡的滑動操作。我觀察到靜態對象變爲空的應用程序中的隨機崩潰。靜態變量在合併v4庫後變爲空
我通過以下帖子告訴我內存管理的故事,Android會殺死進程以聲明內存,重新啓動進程並重新啓動最新的活動。
我也明白這是爲什麼靜態變量不是存儲應用程序數據的好地方。我正在尋找& DB作爲替代選擇。但考慮到數據的複雜性,這需要一段時間。
編輯:我沒有將數據存儲在活動中,而是使用具有靜態屬性的類來保存應用程序級別的一組配置。
我的問題是,爲什麼我在集成v4支持庫後面臨這個問題?有沒有人遇到與支持v4 lib類似的問題?這與我的問題或我的模糊假設有什麼關係?
Can static variable value be nulled by system in android app?
Android static object lifecycle
static variable null when returning to the app
這裏是我的應用程序的日誌時崩潰。我在ApplicationConfiguration:getListOrder()方法中觀察NPE,它引用了一個靜態變量。有沒有跡象表明系統已經殺死了這個進程並重新啓動了它?或者他們指出不同的東西? !
@Sync 406D/HierarchicalStateMachine(287):的handleMessage:電子 msg.what = 83D/HierarchicalStateMachine(287):processMsg: ConnectedStateD/WifiStateMachine(287):ConnectedState {什麼= 83 時= - (287):handleMessage: XW/PowerManagerService(287):定時器0x3-> 0x3 | 0x0D/dalvikvm(2775): GC_EXPLICIT已釋放61K,5%空閒6209K/6531K,暫停 6ms + 2msI/fSharp:BackgroundServiceHandler(4637):收到的消息: 3I/fSharp:BackgroundServiceHandler(4637):列表消息處理程序 存在,發送messageI/fSharp:BackgroundThread(4637):Completed (4637):關閉VMW/dalvikvm(4637): threadid = 1:線程以未捕獲異常退出 (group = 0x401b7760)處理出站隊列I/fSharp:BackgroundThread(4637):在執行 循環... D/AndroidRuntime )E/AndroidRuntime(4637):致命例外: mainE/AndroidRuntime(4637): java.lang.NullPointerExceptionE/AndroidRuntime(4637):at com.tfs.fsharpsupport.common.configuration.ApplicationConfiguration.getListOrder(ApplicationConfiguration.java :125)E/AndroidRuntime( 4637):at com.tfs.fsharp.model.ListModel.refreshList(ListModel.java:576)E/AndroidRuntime( 4637):at com.tfs.fsharp.model.ListModel .onListChanged(ListModel.java:332)E/AndroidRuntime( 4637):在 com.tfs.fsharp.model.ListModel.handleListMessage(ListModel.java:285)E/AndroidRuntime( 4637):在 com.tfs.fsharpsupport.background.BackgroundServiceHandler.handleMessage(BackgroundServiceHandler。java:104)E/AndroidRuntime( 4637):at android.os.Handler.dispatchMessage(Handler.java:99)E/AndroidRuntime( 4637):at android.os.Looper.loop(Looper.java:132 )E/AndroidRuntime( 4637):at android.app.ActivityThread.main(ActivityThread.java:4028)E/AndroidRuntime( 4637):at java.lang.reflect.Method.invokeNative(Native Method)E/AndroidRuntime(4637):at java.lang.reflect.Method.invoke(Method.java:491)E/AndroidRuntime( 4637):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java :844)E/AndroidRuntime( 4637):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)E/AndroidRuntime((原始 方法)W/ActivityManager(287):強制整理活動 com.tfs.fsharp.ui.activity/.StartupActivityE/android.os.Debug(287):在dalvik.system.NativeStart.main(原生 方法) dumpstate> /數據/日誌/ dumpstate_app_errorI/dumpstate(5407): beginD/HierarchicalStateMachine(287)
可能你的apk現在變大了,因此可能會遇到內存問題,特別是當你的靜態變量中有很多數據的時候。然而,kill和restart應該由日誌指示。 – njzk2 2013-03-12 10:03:24
你能否請回顧下面的日誌並告訴我服務是否被殺死了? – 2013-03-12 11:47:10