| page.title=Overview Screen |
| page.tags="recents","overview" |
| |
| @jd:body |
| |
| <div id="qv-wrapper"> |
| <div id="qv"> |
| |
| <h2>In this document</h2> |
| <ol> |
| <li><a href="#adding">Adding Tasks to the Overview Screen</a> |
| <ol> |
| <li><a href="#flag-new-doc">Using the Intent flag to add a task</a></li> |
| <li><a href="#attr-doclaunch">Using the Activity attribute to add a task</a></li> |
| </ol> |
| </li> |
| <li><a href="#removing">Removing Tasks</a> |
| <ol> |
| <li><a href="#apptask-remove">Using the AppTask class to remove tasks</a></li> |
| <li><a href="#retain-finished">Retaining finished tasks</a></li> |
| </ol> |
| </li> |
| </ol> |
| |
| <h2>Key classes</h2> |
| <ol> |
| <li>{@link android.app.ActivityManager.AppTask}</li> |
| <li>{@link android.content.Intent}</li> |
| </ol> |
| |
| <h2>Sample code</h2> |
| <ol> |
| <li><a href="{@docRoot}samples/DocumentCentricApps/index.html">Document-centric Apps</a></li> |
| </ol> |
| |
| </div> |
| </div> |
| |
| <p>The overview screen (also referred to as the recents screen, recent task list, or recent apps) |
| is a system-level UI that lists recently accessed <a href="{@docRoot}guide/components/activities.html"> |
| activities</a> and <a href="{@docRoot}guide/components/tasks-and-back-stack.html">tasks</a>. The |
| user can navigate through the list and select a task to resume, or the user can remove a task from |
| the list by swiping it away. With the Android 5.0 release (API level 21), multiple instances of the |
| same activity containing different documents may appear as tasks in the overview screen. For example, |
| Google Drive may have a task for each of several Google documents. Each document appears as a |
| task in the overview screen.</p> |
| |
| <img src="{@docRoot}images/components/recents.png" alt="" width="284" /> |
| <p class="img-caption"><strong>Figure 1.</strong> The overview screen showing three Google Drive |
| documents, each represented as a separate task.</p> |
| |
| <p>Normally you should allow the system to define how your tasks and |
| activities are represented in the overview screen, and you don't need to modify this behavior. |
| However, your app can determine how and and when activities appear in the overview screen. The |
| {@link android.app.ActivityManager.AppTask} class lets you manage tasks, and the activity flags of |
| the {@link android.content.Intent} class let you specify when an activity is added or removed from |
| the overview screen. Also, the <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"> |
| <activity></a></code> attributes let you set the behavior in the manifest.</p> |
| |
| <h2 id="adding">Adding Tasks to the Overview Screen</h2> |
| |
| <p>Using the flags of the {@link android.content.Intent} class to add a task affords greater control |
| over when and how a document gets opened or reopened in the overview screen. When you use the |
| <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> |
| attributes you can choose between always opening the document in a new task or reusing an |
| existing task for the document.</p> |
| |
| <h3 id="flag-new-doc">Using the Intent flag to add a task</h3> |
| |
| <p>When you create a new document for your activity, you call the |
| {@link android.app.ActivityManager.AppTask#startActivity(android.content.Context, android.content.Intent, android.os.Bundle) startActivity()} |
| method of the {@link android.app.ActivityManager.AppTask} class, passing to it the intent that |
| launches the activity. To insert a logical break so that the system treats your activity as a new |
| task in the overview screen, pass the {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} flag |
| in the {@link android.content.Intent#addFlags(int) addFlags()} method of the {@link android.content.Intent} |
| that launches the activity.</p> |
| |
| <p class="note"><strong>Note:</strong> The {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} |
| flag replaces the {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET} flag, |
| which is deprecated as of Android 5.0 (API level 21).</p> |
| |
| <p>If you set the {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} flag when you create |
| the new document, the system always creates a new task with the target activity as the root. |
| This setting allows the same document to be opened in more than one task. The following code demonstrates |
| how the main activity does this:</p> |
| |
| <p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html"> |
| DocumentCentricActivity.java</a></p> |
| <pre> |
| public void createNewDocument(View view) { |
| final Intent newDocumentIntent = newDocumentIntent(); |
| if (useMultipleTasks) { |
| newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); |
| } |
| startActivity(newDocumentIntent); |
| } |
| |
| private Intent newDocumentIntent() { |
| boolean useMultipleTasks = mCheckbox.isChecked(); |
| final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class); |
| newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); |
| newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, incrementAndGet()); |
| return newDocumentIntent; |
| } |
| |
| private static int incrementAndGet() { |
| Log.d(TAG, "incrementAndGet(): " + mDocumentCounter); |
| return mDocumentCounter++; |
| } |
| } |
| </pre> |
| |
| <p class="note"><strong>Note:</strong> Activities launched with the {@code FLAG_ACTIVITY_NEW_DOCUMENT} |
| flag must have the {@code android:launchMode="standard"} attribute value (the default) set in the |
| manifest.</p> |
| |
| <p>When the main activity launches a new activity, the system searches through existing tasks for |
| one whose intent matches the intent component name and the Intent data for the activity. If the task |
| is not found, or the intent contained the {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} |
| flag, a new task will be created with the activity as its root. If it finds one, it brings that task |
| to the front and passes the new intent to {@link android.app.Activity#onNewIntent onNewIntent()}. |
| The new activity gets the intent and creates a new document in the overview screen, as in the |
| following example:</p> |
| |
| <p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html"> |
| NewDocumentActivity.java</a></p> |
| <pre> |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| setContentView(R.layout.activity_new_document); |
| mDocumentCount = getIntent() |
| .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0); |
| mDocumentCounterTextView = (TextView) findViewById( |
| R.id.hello_new_document_text_view); |
| setDocumentCounterText(R.string.hello_new_document_counter); |
| } |
| |
| @Override |
| protected void onNewIntent(Intent intent) { |
| super.onNewIntent(intent); |
| /* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this activity |
| is reused to create a new document. |
| */ |
| setDocumentCounterText(R.string.reusing_document_counter); |
| } |
| </pre> |
| |
| |
| <h3 id="#attr-doclaunch">Using the activity attribute to add a task</h3> |
| |
| <p>An activity can also specify in its manifest that it always launches into a new task by using |
| the <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> |
| attribute, <a href="{@docRoot}guide/topics/manifest/activity-element.html#dlmode"> |
| {@code android:documentLaunchMode}</a>. This attribute has four values which produce the following |
| effects when the user opens a document with the application:</p> |
| |
| <dl> |
| <dt>"{@code intoExisting}"</dt> |
| <dd>The activity reuses an existing task for the document. This is the same as setting the |
| {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} flag <em>without</em> setting the |
| {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} flag, as described in |
| <a href="#flag-new-doc">Using the Intent flag to add a task</a>, above.</dd> |
| |
| <dt>"{@code always}"</dt> |
| <dd>The activity creates a new task for the document, even if the document is already opened. Using |
| this value is the same as setting both the {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} |
| and {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} flags.</dd> |
| |
| <dt>"{@code none”}"</dt> |
| <dd>The activity does not create a new task for the document. The overview screen treats the |
| activity as it would by default: it displays a single task for the app, which |
| resumes from whatever activity the user last invoked.</dd> |
| |
| <dt>"{@code never}"</dt> |
| <dd>The activity does not create a new task for the document. Setting this value overrides the |
| behavior of the {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} |
| and {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} flags, if either of these are set |
| in the intent, and the overview screen displays a single task for the app, which resumes from |
| whatever activity the user last invoked.</dd> |
| </dl> |
| |
| <p class="note"><strong>Note:</strong> For values other than {@code none} and {@code never} the |
| activity must be defined with {@code launchMode="standard"}. If this attribute is not specified, |
| {@code documentLaunchMode="none"} is used.</p> |
| |
| <h2 id="removing">Removing Tasks</h2> |
| |
| <p>By default a document task is automatically removed from the overview screen when its activity |
| finishes. You can override this behavior with the {@link android.app.ActivityManager.AppTask} class, |
| with an {@link android.content.Intent} flag, or with an<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"> |
| <activity></a></code> attribute.</p> |
| |
| <p>You can always exclude a task from the overview screen entirely by setting the |
| <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> |
| attribute, <a href="{@docRoot}guide/topics/manifest/activity-element.html#exclude"> |
| {@code android:excludeFromRecents}</a> to {@code true}.</p> |
| |
| <p>You can set the maximum number of tasks that your app can include in the overview screen by setting |
| the <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> |
| attribute <a href="{@docRoot}guide/topics/manifest/activity-element.html#maxrecents">{@code android:maxRecents} |
| </a> to an integer value. The default is 16. When the maximum number of tasks is reached, the least |
| recently used task is removed from the overview screen. The {@code android:maxRecents} maximum value |
| is 50 (25 on low memory devices); values less than 1 are not valid.</p> |
| |
| <h3 id="#apptask-remove">Using the AppTask class to remove tasks</h3> |
| |
| <p>In the activity that creates a new task in the overview screen, you can |
| specify when to remove the task and finish all activities associated with it by calling |
| the {@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()} method.</p> |
| |
| <p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html"> |
| NewDocumentActivity.java</a></p> |
| <pre> |
| public void onRemoveFromRecents(View view) { |
| // The document is no longer needed; remove its task. |
| finishAndRemoveTask(); |
| } |
| </pre> |
| |
| <p class="note"><strong>Note:</strong> Using the |
| {@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()} method |
| overrides the use of the {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} tag, |
| discussed below.</p> |
| |
| <h3 id="#retain-finished">Retaining finished tasks</h3> |
| |
| <p>If you want to retain a task in the overview screen, even if its activity has finished, pass |
| the {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} flag in the |
| {@link android.content.Intent#addFlags(int) addFlags()} method of the Intent that launches the activity.</p> |
| |
| <p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html"> |
| DocumentCentricActivity.java</a></p> |
| <pre> |
| private Intent newDocumentIntent() { |
| final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class); |
| newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT | |
| android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS); |
| newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, incrementAndGet()); |
| return newDocumentIntent; |
| } |
| </pre> |
| |
| <p>To achieve the same effect, set the |
| <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> |
| attribute <a href="{@docRoot}guide/topics/manifest/activity-element.html#autoremrecents"> |
| {@code android:autoRemoveFromRecents}</a> to {@code false}. The default value is {@code true} |
| for document activities, and {@code false} for regular activities. Using this attribute overrides |
| the {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} flag, discussed previously.</p> |
| |
| |
| |
| |
| |
| |
| |