2010年12月3日金曜日

Android アクティビティとタスク

Androidでは画面(Activity)はスタックとして管理される。
例えば画面a、b、cで構成されるアプリがあるとしa⇒b⇒cと画面を開くと
内部では以下のようにタスクに積まれていく。


例) a⇒b⇒c



タスク タスク タスク タスク
| | | | | | |c|← ここが表示
| |⇒|b|⇒|b|⇒|b|
|a| |a| |a| |a|
  ̄   ̄    ̄   ̄


タスクはオブジェクトを保持するので、複数おなじ画面を開いても基本は
別々にインスタンスがタスクに格納される。


例) a⇒b⇒b



タスク タスク タスク タスク
| | | | | | |b|← ここが表示
| |⇒|b|⇒|b|⇒|b|
|a| |a| |a| |a|
  ̄   ̄    ̄   ̄


まあタスクはプッシュ・ポップ型になっており、startActivity()を呼ぶとタスクに
プッシュされ、戻るボタンを押下するとタスクからポップされる。


例) a⇒b⇒c⇒「戻る押下」



タスク タスク タスク タスク タスク
| | | | | | |c| | |
| |⇒|b|⇒|b|⇒|b|⇒|b|← ここが表示
|a| |a| |a| |a| |a|
  ̄   ̄    ̄   ̄    ̄


さらにタスクのアクティビティは1つのユニットとして移動する。
例えばa、b、cで構成されたアプリ①があり、ホーム画面を押し別のx、y、zで
構成されるアプリ②を呼び出すと、①アプリ1つのユニットとしてバックグラウンド
に一旦引っ込み、②のタスクユニットがフォアグラウンドに呼ばれる。そのあと
またホーム画面を表示し①のアプリをよんで戻るボタンを押下しても②のアプリ
は表示されず、b画面が表示される。



例)アプリ①(abc)⇒ホーム⇒アプリ②(xyz)⇒ホーム⇒アプリ①(abc)⇒戻る

==フォアグラウンド====================================================
タスク       タスク タスク タスク
|c|        |z|        |c| | |
|b|⇒ホーム画面⇒|y|⇒ホーム画面⇒|b|⇒|b|←ここが表示
|a|       |x|       |a| |a|
  ̄          ̄   ̄   ̄
==バックグラウンド====================================================
タスク            
|c|            
|b|⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ↑↑↑
|a|           
  ̄             
タスク     
      |z|
|y|⇒ ⇒ ⇒ ⇒ ⇒
      |x|
         ̄ 
======================================================================
上記は基本だが、ほとんどの状態を変更できる。親和性と新しいタスクで説明。

0 件のコメント: