こんにちは
はじめまして、宮川です。
ryoさんのおっしゃる状況をテストするために一つテストプロジェクトを作成して確認してみました。以下に置いておきます。
http://mowa-net.jp/~amedama/tmp/SetContentViewTest.tar.gz
画面をタップするとCustomTextViewクラスが新しいオブジェクトを生成して親のActivityのsetContentViewを呼ぶことで見た目では数字がカウントされる、というものです。
おっしゃる状況を再現するほぼ最小の構成にしてあります。
上記のアプリケーションを試す限りですと、ryoさんがおっしゃる状況と異なり、
- BACKキーを押下
- 再度アプリを立ち上げ
- 画面をタップ
-> 数字は正しくカウントされる
と、
> 画面が更新されない場合があります。
というおっしゃる状況は起こりません。一応「更新」はされます。(もし私の理解が間違っているようであればご指摘願います)
ただし、BACKキーを押下した際、なぜか必ずonStop()どころかonDestroy()まで呼ばれてアプリケーションが完全に終了してしまうため、
アプリケーションの情報がすべて失われてしまいます。具体的には、カウントが1に必ず戻ってしまいます。
# Activity の状態遷移についてもしご存じなければ以下のページの図をご覧ください
#
http://developer.android.com/reference/android/app/Activity.html一方、HOME を押した際にはonDestroy()が呼ばれないため、Activityのステートは保存されています。
ryoさんの環境でも同様のことが起きていないかご確認いただけますか。
アプリケーション開発を行う立場から言うと、BACKやHOMEボタンでアプリケーションをバックグラウンドに押しやった場合には、
原則としてそのプロセスが殺される可能性が常にあるとお考えください。
『初めてのAndroid』という本によると、最悪、onDestroy()すら呼ばれない可能性があります。
(メモリが逼迫している環境で起こり得る問題です)
ですので、BACKなどを押された際に呼ばれるonPause()で、残しておきたい情報はすべて何らかのストレージに入れておくことをお勧めします。
例えば、今回私が作成したアプリケーションであれば、押下されたカウント数をonPause()時点でPreferenceに保存し、onResume()で読み出す、といった操作が良いかと思います。
後は予断になりますが、実装の面から言うと、BACKが押されただけでonDestroy()が呼ばれるのはちょっと不可思議ですし「むかつき」ますので、ちょっと調べてみます。何か分かればまたメールさせていただきます。
それでは失礼します m(_ _)m
--
Daisuke Miyakawa (宮川大輔)
d.miy...@gmail.com