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<activity></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"><activity></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@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@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"><activity></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<activity></a></code>.</p> 193 194<p>Можно в любой момент полностью убрать задачу с экрана обзора, установив для атрибута 195<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></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"><activity></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"><activity></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