Android4.0でCursor使用時に例外が発生する
Android4.0で、カーソルを使用しているActivityAからActivityBに遷移して、ハードウェアの戻るボタンでActivityAに戻ったとき以下の例外が発生しました。
java.lang.RuntimeException: Unable to resume activity java.lang.IllegalStateException: trying to requery an already closed cursor
ActivityAで、
startManagingCursor(cursor);
としていると、カーソルの管理をAndroidに委譲できるが、これが原因となっているようです。ドキュメントを見ると確かにstartManagingCursor(cursor)は、deprecatedとなっていました。
ドキュメントには、CursorLoader()を使えと書いてありますが、カーソルの管理をAndroidに委譲していたから、例外が発生しているので、素直に自前で管理してあげれば良いようです。なので、onDestroy()で
cursor.close();
としてやると解決しました。