• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=オーバービュー画面
2page.tags="recents","overview"
3
4@jd:body
5
6<div id="qv-wrapper">
7<div id="qv">
8
9  <h2>本書の内容</h2>
10  <ol>
11    <li><a href="#adding">オーバービュー画面にタスクを追加する</a>
12      <ol>
13        <li><a href="#flag-new-doc">インテント フラグを使用してタスクを追加する</a></li>
14        <li><a href="#attr-doclaunch">アクティビティの属性を使用してタスクを追加する</a></li>
15      </ol>
16    </li>
17    <li><a href="#removing">タスクを削除する</a>
18      <ol>
19        <li><a href="#apptask-remove">AppTask クラスを使用してタスクを削除する</a></li>
20        <li><a href="#retain-finished">完了したタスクを保持する</a></li>
21      </ol>
22    </li>
23  </ol>
24
25  <h2>キークラス</h2>
26  <ol>
27    <li>{@link android.app.ActivityManager.AppTask}</li>
28    <li>{@link android.content.Intent}</li>
29  </ol>
30
31  <h2>サンプル コード</h2>
32  <ol>
33    <li><a href="{@docRoot}samples/DocumentCentricApps/index.html">ドキュメント中心のアプリ</a></li>
34  </ol>
35
36</div>
37</div>
38
39<p>オーバービュー画面(別名、最近使った画面、最近使ったタスクリスト、最近使ったアプリ)は、最近アクセスした<a href="{@docRoot}guide/components/activities.html">アクティビティ</a>や<a href="{@docRoot}guide/components/tasks-and-back-stack.html">タスク</a>の一覧を示すシステムレベルの UI です。
40
41ユーザーはリスト内をナビゲートして再開するタスクを選択したり、スワイプしてタスクをリストから削除したりできます。
42
43Android 5.0(API レベル 21)のリリースでは、異なるドキュメントを持つ同一アクティビティ内の複数のインスタンスが、1 つのタスクとしてオーバービュー画面に表示される場合があります。
44たとえば、Google ドライブには複数の Google ドキュメントごとのタスクが表示される場合があります。
45オーバービュー画面には、各ドキュメントが 1 つのタスクとして表示されます。
46</p>
47
48<img src="{@docRoot}images/components/recents.png" alt="" width="284" />
49<p class="img-caption"><strong>図 1.</strong> オーバービュー画面に表示されている 3 つの Google ドライブ ドキュメントが、それぞれ別のタスクを表しています。
50</p>
51
52<p>通常、オーバービュー画面にタスクとアクティビティを提示する方法はシステムが定義できるよう許可し、この動作を変更する必要はありません。
53ただし、アクティビティをいつ、どのようにオーバービュー画面に表示するかをアプリで決定することもできます。
54{@link android.app.ActivityManager.AppTask} クラスを使ってタスクを管理でき、{@link android.content.Intent} クラスのアクティビティ フラグを使うとアプリをオーバービュー画面に追加、削除するタイミングを指定できます。
55
56
57また、<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">
58&lt;activity&gt;</a></code> 属性を使ってマニフェストで動作を設定することもできます。</p>
59
60<h2 id="adding">オーバービュー画面にタスクを追加する</h2>
61
62<p>{@link android.content.Intent} クラスのフラグを使用してタスクを追加すると、ドキュメントをいつ、どのようにオーバービュー画面で開いたり、再度開いたりできるかを細かく制御できます。
63<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> 属性を使用すると、常に新しいタスクでドキュメントを開くか、ドキュメントの既存のタスクを再利用するかを選択できます。
64
65
66</p>
67
68<h3 id="flag-new-doc">インテント フラグを使用してタスクを追加する</h3>
69
70<p>アクティビティの新しいドキュメントを作成するときは、{@link android.app.ActivityManager.AppTask} クラスの {@link android.app.ActivityManager.AppTask#startActivity(android.content.Context, android.content.Intent, android.os.Bundle) startActivity()} メソッドを呼び出し、アクティビティを起動するインテントを渡します。
71
72
73論理的な改行を挿入して、システムがアクティビティをオーバービュー画面の新しいタスクとして扱えるようにするには、{@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} フラグを、アクティビティを起動する {@link android.content.Intent} の {@link android.content.Intent#addFlags(int) addFlags()} メソッドに渡します。
74
75
76</p>
77
78<p class="note"><strong>注:</strong> {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} フラグは、Android 5.1(API レベル 21)で廃止された {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET} を置き換えるものです。
79
80</p>
81
82<p>新しいドキュメントの作成時に {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} フラグを設定すると、システムは常にターゲット アクティビティの新しいタスクをルートとして作成するようになります。この設定によって、同じドキュメントを複数のタスクで開くことが可能になります。
83
84これをメインのアクティビティが行う方法を、次のコードで示し舞うs。
85</p>
86
87<p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html">
88DocumentCentricActivity.java</a></p>
89<pre>
90public void createNewDocument(View view) {
91      final Intent newDocumentIntent = newDocumentIntent();
92      if (useMultipleTasks) {
93          newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
94      }
95      startActivity(newDocumentIntent);
96  }
97
98  private Intent newDocumentIntent() {
99      boolean useMultipleTasks = mCheckbox.isChecked();
100      final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);
101      newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
102      newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, incrementAndGet());
103      return newDocumentIntent;
104  }
105
106  private static int incrementAndGet() {
107      Log.d(TAG, "incrementAndGet(): " + mDocumentCounter);
108      return mDocumentCounter++;
109  }
110}
111</pre>
112
113<p class="note"><strong>注:</strong> {@code FLAG_ACTIVITY_NEW_DOCUMENT} フラグを使って起動されたアクティビティには、マニフェスト ファイルで {@code android:launchMode="standard"} 属性の値(デフォルト)が設定されている必要があります。
114
115</p>
116
117<p>メイン アクティビティが新しいアクティビティを起動するとき、システムはアクティビティのインテント コンポーネント名とインテント データに一致するインテントを持つ既存のタスクを検索します。
118タスクが見つからない場合や、インテントに {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} フラグに含まれている場合は、新しいタスクがアクティビティのルートとして作成されます。
119
120タスク見つかった場合は、そのタスクをフロントに移動して、新しいインテントを {@link android.app.Activity#onNewIntent onNewIntent()} に渡します。新しいアクティビティがインテントを受け取り、次の例のようにオーバービュー画面に新しいドキュメントを作成します。
121
122
123</p>
124
125<p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html">
126NewDocumentActivity.java</a></p>
127<pre>
128&#64;Override
129protected void onCreate(Bundle savedInstanceState) {
130    super.onCreate(savedInstanceState);
131    setContentView(R.layout.activity_new_document);
132    mDocumentCount = getIntent()
133            .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0);
134    mDocumentCounterTextView = (TextView) findViewById(
135            R.id.hello_new_document_text_view);
136    setDocumentCounterText(R.string.hello_new_document_counter);
137}
138
139&#64;Override
140protected void onNewIntent(Intent intent) {
141    super.onNewIntent(intent);
142    /* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this activity
143    is reused to create a new document.
144     */
145    setDocumentCounterText(R.string.reusing_document_counter);
146}
147</pre>
148
149
150<h3 id="#attr-doclaunch">アクティビティの属性を使用してタスクを追加する</h3>
151
152<p>アクティビティのマニフェストで、<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> の属性の<a href="{@docRoot}guide/topics/manifest/activity-element.html#dlmode">{@code android:documentLaunchMode}</a> を使ってアクティビティを常に新しいタスクで起動するよう指定することもできます。
153
154
155この属性には 4 つの値があり、ユーザーがアプリケーションでドキュメントを開くときに次のような効果を生みます。
156</p>
157
158<dl>
159  <dt>「{@code intoExisting}」</dt>
160  <dd>アクティビティがそのドキュメントの既存のタスクを再利用します。これは、<a href="#flag-new-doc">インテント フラグを使用してタスクを追加する</a>で説明したように、{@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} フラグを<em>設定せずに</em>、{@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} フラグを設定した場合と同じです。
161
162
163</dd>
164
165  <dt>「{@code always}」</dt>
166  <dd>ドキュメントが既に開いている場合でも、アクティビティがドキュメントの新しいタスクを作成します。これは、{@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} フラグと {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} フラグの両方を設定した場合と同じです。
167
168</dd>
169
170  <dt>「{@code none”}」</dt>
171  <dd>アクティビティはドキュメントの新しいタスクを作成しません。オーバービュー画面はデフォルトでアクティビティがタスクを作成したかのように処理し、アプリの 1 つのタスクを表示して、ユーザーが最後に呼び出したアクティビティから再開します。
172
173</dd>
174
175  <dt>「{@code never}」</dt>
176  <dd>アクティビティはドキュメントの新しいタスクを作成しません。この値を設定すると、{@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} フラグと {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} フラグのいずれかが設定されている場合にその動作をオーバーライドし、オーバービュー画面にはアプリの 1 つのタスクが表示され、ユーザーが最後に呼び出したアクティビティから再開します。
177
178
179
180</dd>
181</dl>
182
183<p class="note"><strong>注:</strong> {@code none} と {@code never} の値以外の場合、アクティビティを {@code launchMode="standard"} を使って定義する必要があります。
184属性が指定されていない場合は、{@code documentLaunchMode="none"} が使用されます。
185</p>
186
187<h2 id="removing">タスクを削除する</h2>
188
189<p>デフォルトで、アクティビティの完了時にドキュメントのタスクはオーバービュー画面から自動的に削除されます。
190この動作は、{@link android.app.ActivityManager.AppTask} クラスで {@link android.content.Intent} フラグを使うか、<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">
191&lt;activity&gt;</a></code> 属性を使ってオーバーライドできます。
192</p>
193
194<p><code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> 属性の <a href="{@docRoot}guide/topics/manifest/activity-element.html#exclude">{@code android:excludeFromRecents}</a> を {@code true} に設定すると、タスクを常にオーバービュー画面から完全に除外することができます。
195
196
197</p>
198
199<p>アプリがオーバービュー画面に表示できるタスクの最大数を設定するには、<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> 属性の <a href="{@docRoot}guide/topics/manifest/activity-element.html#maxrecents">{@code android:maxRecents}</a> に整数値を設定します。
200
201
202デフォルトでは 16 に設定されています。タスクの最大数に達すると、最も古いタスクがオーバービュー画面から削除されます。
203{@code android:maxRecents} の最大値は 50(低メモリの端末では 25)で、1 未満の値は無効です。
204</p>
205
206<h3 id="#apptask-remove">AppTask クラスを使用してタスクを削除する</h3>
207
208<p>オーバービュー画面に新しいタスクを作成するアクティビティで {@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()} を呼び出すと、タスクを削除して関連アクティビティのすべてを終了させるタイミングを指定できます。
209
210</p>
211
212<p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html">
213NewDocumentActivity.java</a></p>
214<pre>
215public void onRemoveFromRecents(View view) {
216    // The document is no longer needed; remove its task.
217    finishAndRemoveTask();
218}
219</pre>
220
221<p class="note"><strong>注:</strong> {@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()} メソッドを使用すると、次のセクションで説明する {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} タグの使用がオーバーライドされます。
222
223
224</p>
225
226<h3 id="#retain-finished">完了したタスクを保持する</h3>
227
228<p>アクティビティの終了後もオーバービュー画面にタスクを保持する場合は、{@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} フラグを、アクティビティを起動するインテントの {@link android.content.Intent#addFlags(int) addFlags()} メソッドに渡します。
229
230</p>
231
232<p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html">
233DocumentCentricActivity.java</a></p>
234<pre>
235private Intent newDocumentIntent() {
236    final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);
237    newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
238      android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS);
239    newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, incrementAndGet());
240    return newDocumentIntent;
241}
242</pre>
243
244<p><code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> 属性の <a href="{@docRoot}guide/topics/manifest/activity-element.html#autoremrecents">{@code android:autoRemoveFromRecents}</a> を {@code false} に設定することでも同じ効果を得られます。
245
246
247ドキュメントのアクティビティのデフォルト値は {@code true}、通常のアクティビティでは {@code false} になります。
248この属性を使用すると、前のセクションで説明した {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} フラグがオーバーライドされます。
249</p>
250
251
252
253
254
255
256
257