Activityのライフサイクルと画面遷移について

319 views
Skip to first unread message

じんぼやん

unread,
Sep 7, 2010, 11:02:05 PM9/7/10
to 日本Androidの会
はじめまして。
Androidを勉強しているのですが、Activityのライフサイクルと画面遷移についてかなり混乱しております。
ご教示よろしくお願いいたします。

メニュー画面←→一覧画面A←→入力画面1←→入力画面2 →|
      ↑―――――――――――――――――|


上記のような画面遷移があるとき
(入力画面にはOK、キャンセルボタンがあるとします。)

アクティビティのライフサイクルでは、次画面を開くと元の画面はonStop()が呼ばれ
システムによりキルされる事があるとありました。

質問1
入力画面1→入力画面2へstartActivityForResult()で遷移した場合
入力画面2を起動すると入力画面1はキルされる場合もある。

入力画面2でキャンセルボタンが押された場合、
入力画面1がキルされていなければ、もとの入力画面1が表示されるので、入力内容が残っている。
入力画面1がキルされていれば、新たにonCreate()されるため、入力内容はクリアされる。
・・・と認識しているのですがあっていますか?

質問2
本体の戻るボタンでも同じですか?

質問3
入力画面2→一覧画面A→メニュー画面への遷移は
一覧画面Aからは本体の戻るボタンで入力画面2に戻りたくない。
一覧画面Aの戻るボタンではメニュー画面を表示したい。
(メニュー画面以外の画面で戻るボタンを押したときに、待ち受け画面にしたくない。
待ち受け画面に戻るのは必ずメニュー画面のみとしたい。)
このような場合はインテントのフラグはどのようにすればよいですか?

質問4
上記のような画面遷移のサンプルがあるような参考書やURLなどをご存じないでしょうか?
参考書として以下を読みましたがどちらもサンプルがゲームアプリでした。
Googleアンドロイド Androidプログラミング入門
Android2.1 プログラミングバイブル
業務アプリ的なDBと絡めて画面遷移するようなサンプルプログラムを探しています。

よろしくお願いいたします。

Fumihito Ozawa

unread,
Sep 8, 2010, 12:49:23 AM9/8/10
to android-g...@googlegroups.com
小澤です。

ここなどいかがでしょう。

2010年9月8日12:02 じんぼやん <gymb...@gmail.com>:

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


じんぼやん

unread,
Sep 8, 2010, 1:59:20 AM9/8/10
to 日本Androidの会
小澤さま
ありがとうございます。

> ここなどいかがでしょう。http://www.atmarkit.co.jp/fjava/rensai4/android02/android02_1.html
ここは以前にも読みました。
もう一度読み直しましたが、基本的なライフサイクルはわかります。
しかし具体的に「質問の件」をどうしたらよいのかはわかりませんでした。

じんぼやん

unread,
Sep 8, 2010, 3:45:55 AM9/8/10
to 日本Androidの会
質問1について、下記のサイトに情報がありました。
Activityの再起動時の値保持
http://isakado.blog106.fc2.com/blog-entry-55.html

質問2~4についてよろしくお願いいたします。

あんざいゆき

unread,
Sep 8, 2010, 4:50:11 AM9/8/10
to android-g...@googlegroups.com
じんぼやんさん

  あんざいです。

  以下の仮定のもとに書きますが、間違っていたら指摘してください
    ・この4つの画面はすべて同じタスクに属している
    ・このタスクのエントリーポイントはメニュー画面である
     (=ランチャーから起動した場合最初に表示される画面がメニュー画面)
    ・キャンセルボタンは現在の Activity を finish() することで、遷移先を startActivity() することではない


> 質問1

> 入力画面1→入力画面2へstartActivityForResult()で遷移した場合

> 入力画面2を起動すると入力画面1はキルされる場合もある。

  上記の条件で、もし、入力画面2がフォアグラウンドにあって、
  入力画面1がキルされるような場合があるとすると、
  その時はメニュー画面と一覧画面Aもキルされているはずです。
  (=入力画面2で端末の戻るキーを押すと、端末のホーム画面になる)

  ただし、フォアグラウンドの Activity が属しているタスクの他の Activity が
  キルされるのは一番最後で、他のタスクからキルされるので
  この状況はあまりないかなと思います。



> 入力画面2でキャンセルボタンが押された場合、

> 入力画面1がキルされていなければ、もとの入力画面1が表示されるので、入力内容が残っている。

  EditText は確かシステム側が入力状態を保持していてくれたと思います。
  ほかの widget の状態(選択した画像を ImageView に表示しているとか)
  は自分で状態を onPause() とかで保存しておかないと入力内容はきえてるはず。


> 入力画面1がキルされていれば、新たにonCreate()されるため、入力内容はクリアされる。


  入力画面2でキャンセルボタンの実装が finish() なら新しく onCreate() はされないと思います。
  startActivity なら別ですけど、、、その場合launchMode属性を適切に設定しないと
  元の画面ではなく、新しい画面が常に作成されたりしてしまうので要注意です。


> 質問2

> 本体の戻るボタンでも同じですか?

 質問1のコメントと同じです(finish() のほう)




> 質問3

> 入力画面2→一覧画面A→メニュー画面への遷移は

> 一覧画面Aからは本体の戻るボタンで入力画面2に戻りたくない。

> 一覧画面Aの戻るボタンではメニュー画面を表示したい。

> (メニュー画面以外の画面で戻るボタンを押したときに、待ち受け画面にしたくない。

> 待ち受け画面に戻るのは必ずメニュー画面のみとしたい。)

> このような場合はインテントのフラグはどのようにすればよいですか?


  入力画面2 から一覧画面Aへの遷移というのは、
  入力画面2 で入力した内容をpreference や SDカードなどの保存して
  入力を完了したときの処理ということですよね?
  それなら、入力画面2 で入力が完了したときに、入力画面2 を 1 を finish()
  して、一覧画面Aに戻ればいいと思います。
  こうすると、一覧画面Aで端末の戻るボタンをおした場合はメニュー画面に
  なります。





> 質問4

> 上記のような画面遷移のサンプルがあるような参考書やURLなどをご存じないでしょうか?

> 参考書として以下を読みましたがどちらもサンプルがゲームアプリでした。

> Googleアンドロイド Androidプログラミング入門

> Android2.1 プログラミングバイブル

> 業務アプリ的なDBと絡めて画面遷移するようなサンプルプログラムを探しています。


   android developer の公式サイトだと
   アクティビティとタスク http://developer.android.com/intl/ja/guide/topics/fundamentals.html#acttask
   に書いてあります。

   # でも日本語がわかりずらいです。
   # ので、ブログに意訳をのせてます
   # http://y-anz-m.blogspot.com/2010/08/android_10.html
   # 意訳なので、まちがってたらごめんなさい



----
あんざいゆき
anzai...@gmail.com
twitter : yanzm

じんぼやん

unread,
Sep 8, 2010, 5:29:59 AM9/8/10
to 日本Androidの会
あんざいさま

大変わかりやすい解説ありがとうございました。
混乱していたのがスッキリしました。


1点確認したいのですが

>ただし、フォアグラウンドの Activity が属しているタスクの他の Activity が
>キルされるのは一番最後で、他のタスクからキルされるので
>この状況はあまりないかなと思います。

フォアグラウンドと同一タスクにある他のアクティビティはキルされることは
考慮しなくてよいということでよろしいですか?

あんざいゆき

unread,
Sep 8, 2010, 9:36:41 AM9/8/10
to android-g...@googlegroups.com
あんざいです。

 Bitmap をたくさん使うとか、重たい動画を
 再生するとかだと、起こり得なくもないですが、
 そういう場合、自分も Out Of Memory で落ちちゃう
 ような状況になりそうですよね。

 途中までの入力が消えたりするのが
 心配なら、onPause() で適宜保存するのが
 いいと思いますよ。


2010年9月8日18:29 じんぼやん <gymb...@gmail.com>:
--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。




--
あんざい ゆき
anzai...@gmail.com
twitter : @yanzm

じんぼやん

unread,
Sep 9, 2010, 12:14:11 AM9/9/10
to 日本Androidの会
あんざいさま

ありがとうございました。
疑問が解決いたしました。

Reply all
Reply to author
Forward
0 new messages