アプリケーションの開始から終了まで、永続的にデータを保持していたい場合、Activityのメンバに持っていても、Activityは常に破棄される可能性があるので、その時にデータも消えてしまう・・・。
Application | Android Developers
Applicationクラスなら、開始から終了まで永続的にデータを保持できる・・・。
activity_main.xmlに、
Buttonを1つ・・・。
strings.xmlで、
Button1とする・・・。
Classを追加・・・。
Applicationの派生クラスCustomApplication・・・。
アプリケーションが永続的に保持する独自メンバappCountを0に初期化し、onCreate時やonTerminate時に値を表示・・・。
外のクラスからもアクセスできるようにsetAppCountやgetAppCountを定義・・・。
MainActivity.javaでは、
Button1を押したら、SubActivityを起動するようにしている・・・。
で、SubActivity.javaは、
SubActivityのみで有効なsubCountを0に初期化して、onCreate時にsubCountの値を表示してから1増やす・・・。
そのあと、CustomApplicationメンバオブジェクトcustomAppをgetApplicationで取得し、getAppCountで取得した値を表示してから、1増やしてsetAppCountでcustomAppにセットする・・・。
onDestroyの時にもsubCount、appCountともに表示する・・・。
あとは、
android:name=".CustomApplication"とすることで、独自のCustomApplicationが使われるようになる・・・。
実行すると、
これはCustomApplicationのonCreate時のappCountの値・・・。
アプリケーションの開始とともに、appCountが0・・・。
Button1を押すと、
SubActivityが起動・・・。
subCountが0・・・。
appCountも0・・・。
しかし、このあとどちらの値もインクリメントされている・・・。
バックキーで戻ると、
subCountが1に・・・。
appCountが1に・・・。
また、Button1を押してみると・・・。
破棄されたSubActivityを改めて再生成してるので、subCountは0・・・。
appCountは破棄されていないCustomApplicationオブジェクトから取得しているので1・・・。
またバックキーを押すと、
subCountは1、
appCountは2となる・・・。
戻ったときにはSubActivityは破棄されるので、何度やってもsubCountは2以上にはならない・・・。
一方、appCountはアプリケーションが終了するまで、SubActivityを起動するたびに1増えていく・・・。
ちなみにButton1を表示しているMainActivityの状態からバックキーでアプリケーションを終了しても、
onTerminate時のappCountが表示されない・・・。
baroqueworksdevの日記: Application#onTerminate()がコールされない
どうも実際にはonTerminateは呼ばれない模様・・・。
Sample/android/Application/Application/src/Application at master · bg1bgst333/Sample · GitHub