• 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">Использование флага Intent для добавления задачи</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>Экран обзора (также используются названия: экран последних задач, список последних задач или последние приложения)
40является элементом пользовательского интерфейса системного уровня, в котором содержится список последних <a href="{@docRoot}guide/components/activities.html">
41операций</a> и <a href="{@docRoot}guide/components/tasks-and-back-stack.html">задач</a>. Пользователь
42может перемещаться по списку и выбирать задачи для возобновления, или жестом удалять задачи
43из списка. В версии Android 5.0 (уровень API 21) несколько экземпляров
44одной операции, содержащие различные документы, могут отображаться в виде задач на экране обзора. Например,
45Google Диск может иметь задачу для каждого из нескольких документов Google. На экране обзора каждый документ
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>Обычно следует разрешить системе определить способ представления ваших задач и
53операций на экране обзора. Вам не нужно менять это поведение.
54Однако приложение может определять способ и время появления операции на экране обзора. С помощью класса
55{@link android.app.ActivityManager.AppTask} можно управлять задачами, а с помощью флагов операции класса
56{@link android.content.Intent} указывается, когда операция добавляется на экран обзора
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">Использование флага Intent для добавления задачи</h3>
69
70<p>При создании нового документа для операции вы вызываете метод
71{@link android.app.ActivityManager.AppTask#startActivity(android.content.Context, android.content.Intent, android.os.Bundle) startActivity()}
72класса {@link android.app.ActivityManager.AppTask}, передавая ему intent,
73который запускает операцию. Для вставки логического разрыва, чтобы система обрабатывала вашу операцию как новую
74задачу на экране обзора, передайте флаг {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
75в метод {@link android.content.Intent#addFlags(int) addFlags()} {@link android.content.Intent},
76который запускает операцию.</p>
77
78<p class="note"><strong>Примечание.</strong> Флаг {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
79замещает флаг {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET},
80который является устаревшим для систем Android 5.0 и выше (уровень API 21).</p>
81
82<p>Если вы установили флаг {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} при создании
83нового документа, система всегда создает новую задачу с целевой операцией в качестве корня.
84Этот параметр позволяет открывать один документ в нескольких задачах. Следующий код показывает,
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},
114должны иметь значение атрибута {@code android:launchMode="standard"} (по умолчанию), установленное
115в манифесте.</p>
116
117<p>Когда основная операция запускает новую операцию, система ищет в существующих задачах одну,
118значение intent которой соответствует имени компонента и данным Intent для операции. Если задача
119не найдена или intent содержит флаг {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK},
120создается новая задача с операцией в качестве корня. Если задача найдена, система выводит
121 эту задачу на передний план и передает новое значение intent в {@link android.app.Activity#onNewIntent onNewIntent()}.
122Новая операция получает intent и создает новый документ на экране обзора, как
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>В манифесте операции можно также указать, что операция всегда запускается в новой задаче. Для этого используется атрибут
153<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>
154, <a href="{@docRoot}guide/topics/manifest/activity-element.html#dlmode">
155{@code android:documentLaunchMode}</a>. Этот атрибут имеет четыре значения, которые работают следующим образом,
156когда пользователь открывает документ в приложении:</p>
157
158<dl>
159  <dt>"{@code intoExisting}"</dt>
160  <dd>Операция повторно использует существующую задачу для документа. Это равносильно установке
161флага {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} <em>без</em> установки
162флага {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}, как описано в разделе
163<a href="#flag-new-doc">Использование флага Intent для добавления задачи</a> выше.</dd>
164
165  <dt>"{@code always}"</dt>
166  <dd>Операция создает новую задачу для документа, даже если документ уже открыт. Использование
167этого значения равносильно установке обоих флагов {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
168и {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}.</dd>
169
170  <dt>"{@code none”}"</dt>
171  <dd>Операция не создает новой задачи для документа. Экран обзора обрабатывает
172операцию как операцию по умолчанию: на экране обзора отображается одна задача для приложения, которая
173возобновляется с любой последней операции, вызванной пользователем.</dd>
174
175  <dt>"{@code never}"</dt>
176  <dd>Операция не создает новой задачи для документа. Установка этого значения
177переопределяет поведение флагов {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
178 и {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}, если оба они установлены в
179intent, и на экране обзора отображается одна задача для приложения, которая
180возобновляется с любой последней операции, вызванной пользователем.</dd>
181</dl>
182
183<p class="note"><strong>Примечание.</strong> Для значений кроме {@code none} и {@code never}
184операция должна быть определена с атрибутом {@code launchMode="standard"}. Если этот атрибут не указан,
185используется {@code documentLaunchMode="none"}.</p>
186
187<h2 id="removing">Удаление задач</h2>
188
189<p>По умолчанию задача документа автоматически удаляется с экрана обзора после завершения
190соответствующей операции. Можно переопределить это поведение с помощью класса {@link android.app.ActivityManager.AppTask},
191с флагом {@link android.content.Intent} или атрибутом <code><a href="{@docRoot}guide/topics/manifest/activity-element.html">
192&lt;activity&gt;</a></code>.</p>
193
194<p>Можно в любой момент полностью убрать задачу с экрана обзора, установив для атрибута
195<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>
196 <a href="{@docRoot}guide/topics/manifest/activity-element.html#exclude">
197{@code android:excludeFromRecents}</a> значение {@code true}.</p>
198
199<p>Можно установить максимальное число задач, которое ваше приложение может включить в экран обзора, установив для атрибута
200<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>
201 <a href="{@docRoot}guide/topics/manifest/activity-element.html#maxrecents">{@code android:maxRecents}
202</a> целое значение. Значение по умолчанию: 16. При достижении максимального количества задач самая
203долго не используемая задача удаляется с экрана обзора. Максимальное значение {@code android:maxRecents} составляет
20450 (25 для устройств с малым объемом памяти); Значения менее 1 не допускаются.</p>
205
206<h3 id="#apptask-remove">Использование класса AppTask для удаления задач</h3>
207
208<p>В операции, которая создает новую задачу на экране обзора,
209можно указать время удаления задачи и завершения всех связанных с ней операций, вызвав
210метод {@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()}.</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> Использование
222метода {@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()},
223который переопределяет использование тега {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS},
224рассмотрен ниже.</p>
225
226<h3 id="#retain-finished">Сохранение завершенных задач</h3>
227
228<p>Чтобы сохранить задачу на экране обзора, даже если ее операция завершена, передайте
229флаг {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} в метод
230{@link android.content.Intent#addFlags(int) addFlags()} объекта Intent, который запускает операцию.</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>Для достижения того же результата установите для атрибута
245<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>
246 <a href="{@docRoot}guide/topics/manifest/activity-element.html#autoremrecents">
247{@code android:autoRemoveFromRecents}</a> значение {@code false}. Значение по умолчанию {@code true}
248для операций документа и {@code false} для обычных операций. Использование этого атрибута переопределяет
249флаг {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS}, описанный выше.</p>
250
251
252
253
254
255
256
257