• 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">使用 Activity 屬性來新增工作</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>總覽畫面 (也被稱為最近畫面、最近工作清單,或最近的應用程式) 是系統層級的 UI,可以列出最近存取的 <a href="{@docRoot}guide/components/activities.html">Activity</a> 與<a href="{@docRoot}guide/components/tasks-and-back-stack.html">工作</a>。
40
41使用者可以透過清單導覽並選擇要繼續的工作,或是使用者可以滑動的方式從清單移除工作。
42
43使用 Android 5.0 版本 (API 級別 21),相同 Activity (包含不同文件) 的多個執行個體可以在總覽畫面中顯示為工作。
44例如:對多份 Google 文件,Google 雲端硬碟能讓每份文件都對應一個工作。
45每份文件在總覽畫面中都會顯示為工作。
46</p>
47
48<img src="{@docRoot}images/components/recents.png" alt="" width="284" />
49<p class="img-caption"><strong>圖 1.</strong>總覽畫面會顯示三份 Google 雲端硬碟文件,每份都分別顯示為一項工作。
50</p>
51
52<p>一般而言,您應該允許系統定義如何在總覽畫面中呈現工作與 Activity,而且不需要修改此行為。
53然而,您的應用程式可以決定要如何與在何時於總覽畫面中顯示 Activity。
54
55{@link android.app.ActivityManager.AppTask} 類別讓您可以管理工作,而 {@link android.content.Intent} 類別的 Activity 旗標可以讓您指定何時從總覽畫面新增或移除 Activity。
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當您使用
64<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>屬性時,您可以選擇永遠在新工作開啟文件或對文件重複使用現有工作。
65
66</p>
67
68<h3 id="flag-new-doc">使用意圖旗標來新增工作</h3>
69
70<p>當您建立 Activity 的新文件時,您可以呼叫
71 {@link android.app.ActivityManager.AppTask} 類別的 {@link android.app.ActivityManager.AppTask#startActivity(android.content.Context, android.content.Intent, android.os.Bundle) startActivity()}方法,傳送啟動 Activity 的意圖至新文件。
72
73如要插入邏輯中斷,讓系統可以將您的 Activity 當作總覽視窗中的新工作,傳送啟動 Activity 的 {@link android.content.Intent}其 {@link android.content.Intent#addFlags(int) addFlags()} 方法中的 {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} 旗標。
74
75
76</p>
77
78<p class="note"><strong>注意:</strong>{@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} 旗標會取代 {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET} 旗標,後者已從 Android 5.0 (API 級別 21) 起失效。
79
80</p>
81
82<p>如果您在建立新文件時設定 {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} 旗標,則系統永遠會在建立新工作時也在根目錄建立目標 Activity。此設定允許可以在一個以上的工作中開啟相同的文件。
83
84下列程式碼示範主要 Activity 如何處理:
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} 旗標一起啟動的 Activity 務必要在宣示說明中設定 {@code android:launchMode="standard"} 屬性值 (預設)。
114
115</p>
116
117<p>當主要 Activity 啟動新的 Activity 時,系統會透過現有工作搜尋其意圖和 Activity 意圖元件名稱及意圖資料相同的 Activity。
118如果找不到工作,或意圖已包含 {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} 旗標,則會建立新的工作並使用 Activity 做為其根目錄。
119
120如果找到工作,則會將該工作帶到前面並傳送新的意圖到 {@link android.app.Activity#onNewIntent onNewIntent()}。
121新的 Activity 會取得意圖並在總覽視窗中建立新的文件,如下列範例所示:
122
123</p>
124
125<p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html">NewDocumentActivity.java
126</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">使用 Activity 屬性來新增工作</h3>
151
152<p>Activity 也可以在宣示說明中指定為永遠啟動新工作,這可透過使用<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">
153{@code android:documentLaunchMode}</a> 達成。
154
155此屬性有四個值,在使用者使用應用程式開啟文件時,會產生下列效果:
156</p>
157
158<dl>
159  <dt>"{@code intoExisting}"</dt>
160  <dd>Activity 會對文件重複使用現有的工作。設定
161{@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} 旗標,但「不」<em></em>設定
162{@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} 旗標,會與上述<a href="#flag-new-doc">使用意圖旗標來新增工作</a>達到相同效果。
163</dd>
164
165  <dt>"{@code always}"</dt>
166  <dd>Activity 會為文件建立新的工作,就算文件已開始也會建立新的工作。使用此值與設定 {@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>Activity 不會為文件建立新的工作。總覽視窗會將 Activity 當作預設:會顯示應用程式的單一工作,該工作會從使用者最後呼叫的 Activity 繼續。
172
173</dd>
174
175  <dt>"{@code never}"</dt>
176  <dd>Activity 不會為文件建立新的工作。設定此值會覆寫 {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} 與 {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} 旗標的行為,如果任一個已於意圖中設定,總覽視窗會顯示應用程式的單一工作,該工作會從使用者最後呼叫的 Activity 繼續。
177
178
179
180</dd>
181</dl>
182
183<p class="note"><strong>注意:</strong>如果值不是 {@code none} 與 {@code never},則 Activity 必須使用 {@code launchMode="standard"} 定義。
184如果沒有指定此屬性,則會使用
185{@code documentLaunchMode="none"}。</p>
186
187<h2 id="removing">移除工作</h2>
188
189<p>依照預設,當 Activity 結束時,會自動將文件工作從總覽畫面移除。
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>您可以完全從總覽畫面排除工作,設定方式為將
195<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">
196{@code android:excludeFromRecents}</a> 設為 {@code true}。
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>在總覽畫面建立新工作的 Activity 中,您可以指定何時移除工作與結束所有相關 Activity,方法為呼叫{@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()} 方法。
209
210</p>
211
212<p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html">NewDocumentActivity.java
213</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>使用
222{@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()} 方法覆寫 {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} 標籤的使用,會在下面討論。
223
224</p>
225
226<h3 id="#retain-finished">保留結束的工作</h3>
227
228<p>如果您要保留總覽畫面中的工作 (就算其 Activity 已結束), 方法為傳送啟動 Activity 的意圖其 {@link android.content.Intent#addFlags(int) addFlags()} 方法中的
229{@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} 旗標。
230</p>
231
232<p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html">DocumentCentricActivity.java
233</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>如要達到相同效果,可以設定
245<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">
246{@code android:autoRemoveFromRecents}</a> 為 {@code false}。
247對文件 Activity 的預設值為 {@code true},對定期 Activity 的預設值則為 {@code false}。
248如同之前的討論,使用此屬性可以覆寫 {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} 旗標。
249</p>
250
251
252
253
254
255
256
257