我最近将v4 支持库合并到我的 Android 应用程序中,以启用跨标签滑动。我观察到静态对象变为空的应用程序中的随机崩溃。
我浏览了以下帖子,这些帖子告诉我内存管理的故事,其中 Android 会终止进程以获取内存,重新启动进程并重新启动最新活动。
我也明白这就是为什么静态变量不是存储应用程序数据的好地方的原因。我正在研究偏好和数据库作为替代方案。但鉴于数据的复杂性,这将需要一些时间。
编辑:我没有将数据存储在活动中,而是使用具有静态属性的类来保留应用程序级别的一组配置。
我的问题是,为什么我在集成 v4 支持库后会遇到这个问题?有没有人遇到过 support v4 lib 的类似问题?这与我的问题或我的模糊假设有什么关系吗?
这是我的应用程序崩溃时的日志。我在 ApplicationConfiguration: getListOrder() 方法中观察到 NPE,它引用了其中一个静态变量。日志中是否有任何迹象表明系统已终止该进程并重新启动它?或者他们表示不同的东西?
!@Sync 406D/HierarchicalStateMachine(287):handleMessage:E msg.what=83D/HierarchicalStateMachine(287):processMsg:ConnectedStateD/WifiStateMachine(287):ConnectedState{what=83 when=-4ms arg1=5}D/HierarchicalStateMachine( 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): 列表消息处理程序存在,正在发送消息I/fSharp:BackgroundThread(4637): 已完成处理出站队列I/fSharp:BackgroundThread(4637): 在循环中...D/AndroidRuntime(4637):关闭 VMW/dalvikvm(4637): threadid=1: 线程退出未捕获异常 (group=0x401b7760)E/AndroidRuntime(4637): 致命异常:mainE/AndroidRuntime(4637):java.lang.NullPointerExceptionE/AndroidRuntime(4637):在 com.tfs.fsharpsupport.common.configuration.ApplicationConfiguration.getListOrder(ApplicationConfiguration.java:125)E/AndroidRuntime(4637):在 com.tfs .fsharp.model.ListModel.refreshList(ListModel.java:576)E/AndroidRuntime(4637): 在 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):在 android.os.Handler.dispatchMessage(Handler.java:99)E/AndroidRuntime(4637): 在 android.os.Looper.loop(Looper.java:132)E/AndroidRuntime(4637): 在 android.app。ActivityThread.main(ActivityThread.java:4028)E/AndroidRuntime(4637):在 java.lang.reflect.Method.invokeNative(Native Method)E/AndroidRuntime(4637):在 java.lang.reflect.Method.invoke(方法.java:491)E/AndroidRuntime(4637):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)E/AndroidRuntime(4637):在 com.android.internal.os.ZygoteInit .main(ZygoteInit.java:602)E/AndroidRuntime(4637): 在 dalvik.system.NativeStart.main(Native Method)W/ActivityManager(287): 强制完成活动 com.tfs.fsharp.ui.activity/.StartupActivityE /android.os.Debug(287):Dumpstate > /data/log/dumpstate_app_errorI/dumpstate(5407):beginD/HierarchicalStateMachine(287)invokeNative(本机方法)E/AndroidRuntime(4637):在 java.lang.reflect.Method.invoke(Method.java:491)E/AndroidRuntime(4637):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:844)E/AndroidRuntime(4637): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)E/AndroidRuntime(4637): 在 dalvik.system.NativeStart.main(Native方法)W/ActivityManager(287):强制完成活动 com.tfs.fsharp.ui.activity/.StartupActivityE/android.os.Debug(287):Dumpstate > /data/log/dumpstate_app_errorI/dumpstate(5407):beginD/分层状态机(287)invokeNative(本机方法)E/AndroidRuntime(4637):在 java.lang.reflect.Method.invoke(Method.java:491)E/AndroidRuntime(4637):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:844)E/AndroidRuntime(4637): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)E/AndroidRuntime(4637): 在 dalvik.system.NativeStart.main(Native方法)W/ActivityManager(287):强制完成活动 com.tfs.fsharp.ui.activity/.StartupActivityE/android.os.Debug(287):Dumpstate > /data/log/dumpstate_app_errorI/dumpstate(5407):beginD/分层状态机(287)在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)E/AndroidRuntime(4637): 在 dalvik.system.NativeStart.main(Native Method)W/ActivityManager(287): 强制完成活动 com。 tfs.fsharp.ui.activity/.StartupActivityE/android.os.Debug(287):Dumpstate > /data/log/dumpstate_app_errorI/dumpstate(5407):beginD/HierarchicalStateMachine(287)在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)E/AndroidRuntime(4637): 在 dalvik.system.NativeStart.main(Native Method)W/ActivityManager(287): 强制完成活动 com。 tfs.fsharp.ui.activity/.StartupActivityE/android.os.Debug(287):Dumpstate > /data/log/dumpstate_app_errorI/dumpstate(5407):beginD/HierarchicalStateMachine(287)