我注意到,当我从 Gingerbread 升级到 ICS 后,我的应用程序在 Gingerbread 下运行良好时开始崩溃。
应用程序的主要活动(活动 A)有一个菜单选项,可打开从数据库填充的 ListActivity(活动 B);当单击列表中的条目时,会打开第三个活动(活动 C)。当使用返回按钮关闭活动 C 时,应该重新显示活动 B。
在 Gingerbread(和更早的 Android 版本)中,这运行良好,并且大部分时间在 ICS 中继续运行良好。但是,如果我离开应用程序,让活动 C 长时间打开,它就会崩溃。返回应用程序并尝试从活动 C 退回到活动 B 时,应用程序将停止。由于活动 B 的 onResume 中出现空指针异常,LogCat 报告“无法恢复活动”。
onResume 方法中的违规行包含对活动 A 的 onCreate 方法中定义的 DBAdapter 的引用。通过记录对活动 B 的各种生命周期方法的调用,我发现活动 B 在打开活动 C 时总是(如预期的那样)停止. 如果它只是停止就没有问题:在调用 onResume 时仍必须定义 DBAdapter。但是,如果应用程序离开较长时间,则活动 B 被销毁,在这种情况下,DBAdapter(在活动 A 的 onCreate 方法中定义)也必须变为未定义。
解决此问题的方法似乎是插入 if (Global.mDBAdapter== null) {Global.mDBAdapter = new DBAdapter( this, "DatabaseName" );}
到活动 B 的 onCreate 方法中。
我想检查一下我是否正确理解了这一点。是否有描述 SQLite 数据库适配器/助手生命周期行为变化(姜饼和 ICS 之间)的文档?