Intent.FLAG_ACTIVITY_NO_HISTORY 設定時のActivity ライフサイクルについて

1,482 views
Skip to first unread message

Nakashima Hidenori

unread,
Dec 26, 2010, 2:34:03 AM12/26/10
to android-g...@googlegroups.com
みなさま、ぜひお知恵をおかしください。
 
Android2.1でアプリを開発しています。
複数のActivityを用意し、ランチャからActivity1、Activity2、Activity3と順番に起動するようなものをつくっています。
・Activity1→Activity2 の起動時にIntent.FLAG_ACTIVITY_NO_HISTORYを指定してstartActivity()で起動
・Activity2→Activity3 の起動時にIntent.FLAG_ACTIVITY_NO_HISTORYを指定してstartActivity()で起動
 
このようにすると以下のような現象がみられます。
・Activity3が起動されるタイミングでActivity2のonStop()がコールされません。
・Activity3からHomeキーでHome画面にもどったとき、Activity2のonStop()がコールされるが、Activity3はonStop()がコールされない。
 
現在ホームキーで別アプリにフォーカスが移る際に確実にアプリを終了したいという理由で
Intent.FLAG_ACTIVITY_NO_HISTORYを指定しているのですが、
上記のような状態で思ったとおりの実装ができません。
Homeキーが押されても、historyを残さずかつフォーカスが別アプリに移る際にonStop() をコールしてくれるようにしたいです。
 
 
現象と動作は把握できたのですが、対策が全くわからない状態です。
 
どなたかアドバイスをいただけないでしょうか?
 
 
 

松岡 謙治

unread,
Dec 26, 2010, 10:57:45 AM12/26/10
to android-g...@googlegroups.com
松岡です。

画面が閉じたときはonPauseが呼ばれ、
onStopはアプリが終了されるときに呼ばれる事になっているけれど、
状況によってはonStopが呼ばれずにプログラムが終了することもあるという認識
です。
そのためプログラムとしてはonPauseで不必要なバックプロセスは終了させ、
必要なデータは保存し、余分なメモリーは破棄し、リソースは解放しておく必要
があると考えています。

>Activity3が起動されるタイミングでActivity2のonStop()がコールされません。
というのは、Activity2はPause状態になっているだけで完全にStopされておらず、
>Activity3からHomeキーでHome画面にもどったとき、Activity2のonStop()が
コールされるが、 Activity3はonStop()がコールされない。
のは、Homeが呼ばれたことで古いActivity2が先に終了され、新しいActivity3は
残っているという状態だと考えられます。

FLAG_ACTIVITY_NO_HISTORYは起動履歴を残さないだけであって、onPause時に
Activityをstopさせる効果 はないのでは?
プロセスをキルすれば、他のActivityをstopさせることは出来るでしょうが、
ただしこの場合、onPause処理の実行に支障が及び、キルされたプログラムが正
常に終了できなくなることを危惧します。
言い換えれば、他のActivityをStopさせるのは重大な理由がない限りAndroidま
かせにしておくべき領域だと考えています。

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送
> られています。
> このグループに投稿するには、android-g...@googlegroups.com
> メールを送信してください。
> このグループから退会するには、android-group-
> japan+un...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-
> japan?hl=ja からこのグループにアクセスしてください。

Nakashima Hidenori

unread,
Dec 27, 2010, 12:27:06 AM12/27/10
to android-g...@googlegroups.com
松岡さま

ご回答いただき、ありがとうございます。

>画面が閉じたときはonPauseが呼ばれ、
>onStopはアプリが終了されるときに呼ばれる事になっているけれど、状況によってはonStopが呼ばれずにプログラムが終了することもあるという認識です。
→なるほどです。すると逆に必要なデータの初期化処理などはonStart()ではなくonResume()
で行った方が良さそうということですかね。

>FLAG_ACTIVITY_NO_HISTORYは起動履歴を残さないだけであって、onPause時にActivityをstopさせる効果 はないのでは?
→ここがちょっと確信持てないところです。ドキュメントでは以下の表現になっています。
「If set, the new activity is not kept in the history stack. As soon as the user navigates away from it, the activity is finished. This may also be set with the noHistory attribute.」
これを画面が切り替わった時には(=onPause()?)にはactivityが終了されるという解釈をしていました。確かに1つのActivityを"FLAG_ACTIVITY_NO_HISTORY"つきで起動させた時はHOMEキーで画面を切り替えた際にActivityが終了されたのでそういうことかな?と思っていました。今回ご相談しているような現象に直面しよく分からなくなってしまいました。
 

中島

2010年12月26日23:57 松岡 謙治 <e...@firespeed.org>:
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。


Reply all
Reply to author
Forward
0 new messages