| page.title=Tela de visão geral |
| page.tags="recents","overview" |
| |
| @jd:body |
| |
| <div id="qv-wrapper"> |
| <div id="qv"> |
| |
| <h2>Neste documento</h2> |
| <ol> |
| <li><a href="#adding">Adição de tarefas à tela de visão geral</a> |
| <ol> |
| <li><a href="#flag-new-doc">Uso do sinalizador Intent para adicionar uma tarefa</a></li> |
| <li><a href="#attr-doclaunch">Uso do atributo Activity para adicionar uma tarefa</a></li> |
| </ol> |
| </li> |
| <li><a href="#removing">Remoção de tarefas</a> |
| <ol> |
| <li><a href="#apptask-remove">Uso da classe AppTask para remover tarefas</a></li> |
| <li><a href="#retain-finished">Retenção de tarefas terminadas</a></li> |
| </ol> |
| </li> |
| </ol> |
| |
| <h2>Classes principais</h2> |
| <ol> |
| <li>{@link android.app.ActivityManager.AppTask}</li> |
| <li>{@link android.content.Intent}</li> |
| </ol> |
| |
| <h2>Exemplo de código</h2> |
| <ol> |
| <li><a href="{@docRoot}samples/DocumentCentricApps/index.html">Aplicativos centralizados em documentos</a></li> |
| </ol> |
| |
| </div> |
| </div> |
| |
| <p>A tela de visão geral (também chamada de tela de recentes, lista de tarefas recentes ou aplicativos recentes) |
| é uma IU de nível de sistema que lista <a href="{@docRoot}guide/components/activities.html"> |
| atividades</a> e <a href="{@docRoot}guide/components/tasks-and-back-stack.html">tarefas</a> acessadas recentemente. O |
| usuário pode navegar pela lista e selecionar uma tarefa a retomar ou remover uma tarefa da |
| lista deslizando-a para fora. Com a versão 5.0 do Android (API de nível 21), várias instâncias da |
| mesma atividade contendo diferentes documentos podem aparecer como tarefas na tela de visão geral. Por exemplo, o |
| Google Drive pode ter uma tarefa para cada um dos vários documentos do Google. Cada documento aparece como uma |
| tarefa na tela de visão geral.</p> |
| |
| <img src="{@docRoot}images/components/recents.png" alt="" width="284" /> |
| <p class="img-caption"><strong>Figura 1.</strong> A tela de visão geral mostrando três documentos do Google Drive, |
| cada um representado como uma tarefa separada.</p> |
| |
| <p>Normalmente, você deve permitir que o sistema defina como as tarefas e as |
| atividades são representadas na tela de visão geral e não precisa modificar esse comportamento. |
| No entanto, o seu aplicativo pode determinar como e quando as atividades aparecem na tela de visão geral. A |
| classe {@link android.app.ActivityManager.AppTask} permite gerenciar tarefas e os sinalizadores de atividade da classe |
| {@link android.content.Intent} permitem especificar quando uma atividade é adicionada ou removida da |
| tela de visão geral. Além disso, os atributos <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"> |
| <activity></a></code> permitem definir o comportamento no manifesto.</p> |
| |
| <h2 id="adding">Adição de tarefas à tela de visão geral</h2> |
| |
| <p>Usar os sinalizadores da classe {@link android.content.Intent} para adicionar uma tarefa permite maior controle sobre |
| quando e como um documento é aberto ou reaberto na tela de visão geral. Ao usar os atributos |
| <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>, |
| é possível escolher entre sempre abrir o documento em uma nova tarefa ou reutilizar uma |
| tarefa existente para o documento.</p> |
| |
| <h3 id="flag-new-doc">Uso do sinalizador Intent para adicionar uma tarefa</h3> |
| |
| <p>Ao criar um novo documento para a atividade, você chama o método |
| {@link android.app.ActivityManager.AppTask#startActivity(android.content.Context, android.content.Intent, android.os.Bundle) startActivity()} |
| da classe {@link android.app.ActivityManager.AppTask}, passando a ele a intenção que |
| inicia a atividade. Para inserir uma quebra lógica para que o sistema trate a atividade como uma nova |
| tarefa na tela de visão geral, passe o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} |
| no método {@link android.content.Intent#addFlags(int) addFlags()} da {@link android.content.Intent} |
| que inicia a atividade.</p> |
| |
| <p class="note"><strong>Observação:</strong> o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} |
| substitui o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET}, |
| obsoleto a partir do Android 5.0 (API de nível 21).</p> |
| |
| <p>Se você usar o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} ao criar |
| o novo documento, o sistema sempre criará uma nova tarefa com a atividade-alvo como raiz. |
| Essa configuração permite que o mesmo documento seja aberto em mais de uma tarefa. O código a seguir demonstra |
| como a atividade principal faz isso:</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>Observação:</strong> Atividades iniciadas com o sinalizador {@code FLAG_ACTIVITY_NEW_DOCUMENT} |
| devem ter o valor do atributo {@code android:launchMode="standard"} (o padrão) definido no |
| manifesto.</p> |
| |
| <p>Quando a atividade principal inicia uma nova atividade, o sistema procura nas tarefas existentes uma |
| cuja intenção corresponda ao nome do componente da intenção e aos dados de Intent para a atividade. Se a tarefa |
| não for encontrada ou se a intenção continha o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}, |
| uma nova tarefa será criada com a atividade como raiz. Se o sistema encontrar uma tarefa, ele a trará |
| para a frente e passará a nova intenção para {@link android.app.Activity#onNewIntent onNewIntent()}. |
| A nova atividade receberá a intenção e criará um novo documento na tela de visão geral, como no |
| exemplo a seguir:</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">Uso do atributo Activity para adicionar uma tarefa</h3> |
| |
| <p>Uma atividade também pode especificar em seu manifesto que sempre iniciará uma nova tarefa usando |
| o atributo <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>, |
| <a href="{@docRoot}guide/topics/manifest/activity-element.html#dlmode"> |
| {@code android:documentLaunchMode}</a>. Esse atributo tem quatro valores que produzem os seguintes |
| efeitos quando o usuário abre um documento com o aplicativo:</p> |
| |
| <dl> |
| <dt>"{@code intoExisting}"</dt> |
| <dd>A atividade reutiliza uma tarefa existente para o documento. Isso é o mesmo que configurar o |
| sinalizador {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} <em>sem</em> configurar |
| o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}, como descrito em |
| <a href="#flag-new-doc">Uso do sinalizador Intent para adicionar uma tarefa</a> acima.</dd> |
| |
| <dt>"{@code always}"</dt> |
| <dd>A atividade cria uma nova tarefa para o documento, mesmo se o mesmo já estiver aberto. Usar |
| esse valor é o mesmo que configurar os sinalizadores {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} |
| e {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}.</dd> |
| |
| <dt>"{@code none”}"</dt> |
| <dd>A atividade não cria uma nova tarefa para o documento. A tela de visão geral trata a |
| atividade como aconteceria por padrão: ela exibe uma tarefa para o aplicativo, que |
| retoma a atividade invocada por último pelo usuário.</dd> |
| |
| <dt>"{@code never}"</dt> |
| <dd>A atividade não cria uma nova tarefa para o documento. Definir esse valor substitui o |
| comportamento dos sinalizadores {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} |
| e {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}, caso um deles esteja definido |
| na intenção, e a tela de visão geral exibe uma tarefa para o aplicativo, que retoma a |
| atividade invocada por último pelo usuário.</dd> |
| </dl> |
| |
| <p class="note"><strong>Observação:</strong> para valores diferentes de {@code none} e {@code never}, a |
| atividade deve ser definida com {@code launchMode="standard"}. Se esse atributo não for especificado, |
| {@code documentLaunchMode="none"} será usado.</p> |
| |
| <h2 id="removing">Remoção de tarefas</h2> |
| |
| <p>Por padrão, uma tarefa de documento é automaticamente removida da tela de visão geral quando a atividade |
| termina. Esse comportamento pode ser substituído com a classe {@link android.app.ActivityManager.AppTask}, |
| com um sinalizador {@link android.content.Intent} ou com um atributo <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"> |
| <activity></a></code>.</p> |
| |
| <p>É possível excluir inteiramente uma tarefa da tela de visão geral definindo o |
| atributo <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>, |
| <a href="{@docRoot}guide/topics/manifest/activity-element.html#exclude"> |
| {@code android:excludeFromRecents}</a> como {@code true}.</p> |
| |
| <p>É possível definir o número máximo de tarefas que o aplicativo pode incluir na tela de visão geral definindo |
| o atributo <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> |
| <a href="{@docRoot}guide/topics/manifest/activity-element.html#maxrecents">{@code android:maxRecents} |
| </a> como um valor inteiro. O padrão é 16. Quando o número máximo de tarefas é atingido, a tarefa usada menos |
| recentemente é removida da tela de visão geral. O valor máximo de {@code android:maxRecents} |
| é 50 (25 em dispositivos com pouca memória); valores menores que 1 não são válidos.</p> |
| |
| <h3 id="#apptask-remove">Uso da classe AppTask para remover tarefas</h3> |
| |
| <p>Na atividade que cria uma nova tarefa na tela de visão geral, é possível |
| especificar quando remover a tarefa e terminar todas as atividades associadas a ela chamando |
| o método {@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()}.</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>Observação:</strong> o uso |
| do método {@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()} |
| substitui o uso do sinalizador {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} |
| discutido abaixo.</p> |
| |
| <h3 id="#retain-finished">Retenção de tarefas terminadas</h3> |
| |
| <p>Se você deseja reter uma tarefa na tela de visão geral, mesmo que a atividade tenha terminado, passe |
| o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} no |
| método {@link android.content.Intent#addFlags(int) addFlags()} da Intent que inicia a atividade.</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>Para obter o mesmo efeito, defina o |
| atributo <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> |
| <a href="{@docRoot}guide/topics/manifest/activity-element.html#autoremrecents"> |
| {@code android:autoRemoveFromRecents}</a> como {@code false}. O valor padrão é {@code true} |
| para atividades de documentos e {@code false} para atividades comuns. Usar esse atributo substitui |
| o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} discutido anteriormente.</p> |
| |
| |
| |
| |
| |
| |
| |