Gingerbread から ICS にアップグレードした後、Gingerbread で問題なく動作していたアプリがクラッシュし始めたことに気付きました。
アプリのメイン アクティビティ (アクティビティ A) には、データベースから入力された ListActivity (アクティビティ B) を開くメニュー オプションがあります。リスト内のエントリをクリックすると、3 番目のアクティビティ (アクティビティ C) が開きます。アクティビティ C が [戻る] ボタンで閉じられると、アクティビティ B が再表示されるはずです。
Gingerbread (および以前の Android バージョン) では、これは正常に機能し、ほとんどの場合、ICS でも引き続き正常に機能しました。ただし、アクティビティ C を長時間開いたままアプリから移動すると、クラッシュしました。アプリに戻り、アクティビティ C からアクティビティ B に戻ろうとすると、アプリが停止します。アクティビティ B の onResume で null ポインタ例外が発生したため、LogCat は「アクティビティを再開できません」と報告しました。
onResume メソッドの問題行には、アクティビティ A の onCreate メソッドで定義されている DBAdapter への参照が含まれています。アクティビティ B のさまざまなライフサイクル メソッドへの呼び出しをログに記録することにより、アクティビティ C が開かれると、アクティビティ B が常に (予想どおり) 停止することがわかりました。 . 停止するだけであれば問題ありません。onResume が呼び出されたときに DBAdapter を定義する必要があります。ただし、アプリが長期間放置されるとアクティビティ B が破棄され、このような状況では DBAdapter (アクティビティ A の onCreate メソッドで定義) も未定義になる必要があります。
この問題の修正は if (Global.mDBAdapter== null) {Global.mDBAdapter = new DBAdapter( this, "DatabaseName" );}
、アクティビティ B の onCreate メソッドに挿入することのようです。
これを正しく理解しているかどうかを確認したいと思います。SQLite データベース アダプター/ヘルパーのライフサイクル動作の変更 (Gingerbread と ICS の間) を説明するドキュメントはありますか?