menu
書いてる野郎
orebike@gmail.com
2010-03-17
画面の機能と状態をオブジェクト化したもの。
この「状態」を保持しているというのがActivityがWeb系のフレームワークのコントローラーとは違う部分。
Androidでは標準のUIで「戻るボタン」がある。戻るというのは画面状態の巻き戻しを意味するわけだが、ここでAndroidではActivityの状態を巻き戻すのではなく、Activityが生成された場合(主に画面遷移)、前回のActivityをそのままの状態でオブジェクト丸ごとhistory stackというActivityのコレクションに格納する。
この時点で格納されたActivityオブジェクトはユーザーの操作から切り離される。つまりActivityはもう変化しない。
Activityをintentを使い
HogeActivity → PiyoActivity → HogeActivity
順番に画面遷移させたとすると、最初のHogeActivityと最後のHogeActivityはまったく別物としてインスタンス化されるということ
戻るという行為の再現をオブジェクト状態のパラメータ変化ではなく、オブジェクトのスナップショットの蓄積という富豪的な実装にしているということ
このhistory stackをAndroidの解説の文献では「タスク」と呼んだりしています。よくAndroidで言っているマルチタスクのタスクとは違うのでそれはそれで注意
mementパターンのフレームワーク全体での実装という位置づけって感じか。
Activityの生成は一定のルールを使って若干のコントロールができるようになっている。 それはManifestファイルの「activity」要素の「android:launchMod」属性によってコントロールできる。設定できる値は
詳しくは 開発の基礎 Android Developers 参照
この生成のルールはIntentのフラグとの組み合わせによっても変化。Intent Android Developers
standardに設定すると、タスクを生成せず既存のタスクの一番上に Activity を新たに生成して積み上げる。これが標準の動き
つまりまったくlaunchModを設定しなければ、遷移のたびにActivityが何度でも生成されそのhistoryが一直線にダラダラとつみあがっていく。
Androidのリソースが潤沢で何も問題がおきないならこれでほぼOKだけど、リソース開放や大量のオブジェクトを保持する場合はうまくコントロールしてやらないと原因不明の問題が起きる場合アリ
singleTopにするとstandartとほぼ同じ動きなのだが生成予定のActivityが1個前のActivityと同じならばそれをスタック位置ごと再利用してしまうということ。
つまりintent指定でActivityを起動したとしても、1個前に同じActivityクラスから生成されたActivityがあった場合、変化しないということ。これを指定するとhistory stack上に同じ画面が連続で登場しなくなるということ。
ってか同一画面に遷移することなんてあんのかよ・・・