Home | History | Annotate | Download | only in components
      1 page.title=Tela de viso geral
      2 page.tags="recents","overview"
      3 
      4 @jd:body
      5 
      6 <div id="qv-wrapper">
      7 <div id="qv">
      8 
      9   <h2>Neste documento</h2>
     10   <ol>
     11     <li><a href="#adding">Adio de tarefas  tela de viso geral</a>
     12       <ol>
     13         <li><a href="#flag-new-doc">Uso do sinalizador Intent para adicionar uma tarefa</a></li>
     14         <li><a href="#attr-doclaunch">Uso do atributo Activity para adicionar uma tarefa</a></li>
     15       </ol>
     16     </li>
     17     <li><a href="#removing">Remoo de tarefas</a>
     18       <ol>
     19         <li><a href="#apptask-remove">Uso da classe AppTask para remover tarefas</a></li>
     20         <li><a href="#retain-finished">Reteno de tarefas terminadas</a></li>
     21       </ol>
     22     </li>
     23   </ol>
     24 
     25   <h2>Classes principais</h2>
     26   <ol>
     27     <li>{@link android.app.ActivityManager.AppTask}</li>
     28     <li>{@link android.content.Intent}</li>
     29   </ol>
     30 
     31   <h2>Exemplo de cdigo</h2>
     32   <ol>
     33     <li><a href="{@docRoot}samples/DocumentCentricApps/index.html">Aplicativos centralizados em documentos</a></li>
     34   </ol>
     35 
     36 </div>
     37 </div>
     38 
     39 <p>A tela de viso geral (tambm chamada de tela de recentes, lista de tarefas recentes ou aplicativos recentes)
     40  uma IU de nvel de sistema que lista <a href="{@docRoot}guide/components/activities.html">
     41 atividades</a> e <a href="{@docRoot}guide/components/tasks-and-back-stack.html">tarefas</a> acessadas recentemente. O
     42 usurio pode navegar pela lista e selecionar uma tarefa a retomar ou remover uma tarefa da
     43 lista deslizando-a para fora. Com a verso 5.0 do Android (API de nvel 21), vrias instncias da
     44 mesma atividade contendo diferentes documentos podem aparecer como tarefas na tela de viso geral. Por exemplo, o
     45 Google Drive pode ter uma tarefa para cada um dos vrios documentos do Google. Cada documento aparece como uma
     46 tarefa na tela de viso geral.</p>
     47 
     48 <img src="{@docRoot}images/components/recents.png" alt="" width="284" />
     49 <p class="img-caption"><strong>Figura 1.</strong> A tela de viso geral mostrando trs documentos do Google Drive,
     50 cada um representado como uma tarefa separada.</p>
     51 
     52 <p>Normalmente, voc deve permitir que o sistema defina como as tarefas e as
     53 atividades so representadas na tela de viso geral e no precisa modificar esse comportamento.
     54 No entanto, o seu aplicativo pode determinar como e quando as atividades aparecem na tela de viso geral. A
     55 classe {@link android.app.ActivityManager.AppTask} permite gerenciar tarefas e os sinalizadores de atividade da classe
     56 {@link android.content.Intent} permitem especificar quando uma atividade  adicionada ou removida da
     57 tela de viso geral. Alm disso, os atributos <code><a href="{@docRoot}guide/topics/manifest/activity-element.html">
     58 &lt;activity&gt;</a></code> permitem definir o comportamento no manifesto.</p>
     59 
     60 <h2 id="adding">Adio de tarefas  tela de viso geral</h2>
     61 
     62 <p>Usar os sinalizadores da classe {@link android.content.Intent} para adicionar uma tarefa permite maior controle sobre
     63 quando e como um documento  aberto ou reaberto na tela de viso geral. Ao usar os atributos
     64 <code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>,
     65  possvel escolher entre sempre abrir o documento em uma nova tarefa ou reutilizar uma
     66 tarefa existente para o documento.</p>
     67 
     68 <h3 id="flag-new-doc">Uso do sinalizador Intent para adicionar uma tarefa</h3>
     69 
     70 <p>Ao criar um novo documento para a atividade, voc chama o mtodo
     71 {@link android.app.ActivityManager.AppTask#startActivity(android.content.Context, android.content.Intent, android.os.Bundle) startActivity()}
     72 da classe {@link android.app.ActivityManager.AppTask}, passando a ele a inteno que
     73 inicia a atividade. Para inserir uma quebra lgica para que o sistema trate a atividade como uma nova
     74 tarefa na tela de viso geral, passe o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
     75 no mtodo {@link android.content.Intent#addFlags(int) addFlags()} da {@link android.content.Intent}
     76 que inicia a atividade.</p>
     77 
     78 <p class="note"><strong>Observao:</strong> o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
     79 substitui o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET},
     80 obsoleto a partir do Android 5.0 (API de nvel 21).</p>
     81 
     82 <p>Se voc usar o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} ao criar
     83 o novo documento, o sistema sempre criar uma nova tarefa com a atividade-alvo como raiz.
     84 Essa configurao permite que o mesmo documento seja aberto em mais de uma tarefa. O cdigo a seguir demonstra
     85 como a atividade principal faz isso:</p>
     86 
     87 <p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html">
     88 DocumentCentricActivity.java</a></p>
     89 <pre>
     90 public 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>Observao:</strong> Atividades iniciadas com o sinalizador {@code FLAG_ACTIVITY_NEW_DOCUMENT}
    114 devem ter o valor do atributo {@code android:launchMode="standard"} (o padro) definido no
    115 manifesto.</p>
    116 
    117 <p>Quando a atividade principal inicia uma nova atividade, o sistema procura nas tarefas existentes uma
    118 cuja inteno corresponda ao nome do componente da inteno e aos dados de Intent para a atividade. Se a tarefa
    119 no for encontrada ou se a inteno continha o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK},
    120 uma nova tarefa ser criada com a atividade como raiz. Se o sistema encontrar uma tarefa, ele a trar
    121 para a frente e passar a nova inteno para {@link android.app.Activity#onNewIntent onNewIntent()}.
    122 A nova atividade receber a inteno e criar um novo documento na tela de viso geral, como no
    123 exemplo a seguir:</p>
    124 
    125 <p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html">
    126 NewDocumentActivity.java</a></p>
    127 <pre>
    128 &#64;Override
    129 protected 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
    140 protected 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">Uso do atributo Activity para adicionar uma tarefa</h3>
    151 
    152 <p>Uma atividade tambm pode especificar em seu manifesto que sempre iniciar uma nova tarefa usando
    153 o atributo <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>. Esse atributo tem quatro valores que produzem os seguintes
    156 efeitos quando o usurio abre um documento com o aplicativo:</p>
    157 
    158 <dl>
    159   <dt>"{@code intoExisting}"</dt>
    160   <dd>A atividade reutiliza uma tarefa existente para o documento. Isso  o mesmo que configurar o
    161   sinalizador {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} <em>sem</em> configurar
    162   o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}, como descrito em
    163   <a href="#flag-new-doc">Uso do sinalizador Intent para adicionar uma tarefa</a> acima.</dd>
    164 
    165   <dt>"{@code always}"</dt>
    166   <dd>A atividade cria uma nova tarefa para o documento, mesmo se o mesmo j estiver aberto. Usar
    167   esse valor  o mesmo que configurar os sinalizadores {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
    168   e {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}.</dd>
    169 
    170   <dt>"{@code none}"</dt>
    171   <dd>A atividade no cria uma nova tarefa para o documento. A tela de viso geral trata a
    172   atividade como aconteceria por padro: ela exibe uma tarefa para o aplicativo, que
    173   retoma a atividade invocada por ltimo pelo usurio.</dd>
    174 
    175   <dt>"{@code never}"</dt>
    176   <dd>A atividade no cria uma nova tarefa para o documento. Definir esse valor substitui o
    177   comportamento dos sinalizadores {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
    178   e {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}, caso um deles esteja definido
    179   na inteno, e a tela de viso geral exibe uma tarefa para o aplicativo, que retoma a
    180   atividade invocada por ltimo pelo usurio.</dd>
    181 </dl>
    182 
    183 <p class="note"><strong>Observao:</strong> para valores diferentes de {@code none} e {@code never}, a
    184 atividade deve ser definida com {@code launchMode="standard"}. Se esse atributo no for especificado,
    185 {@code documentLaunchMode="none"} ser usado.</p>
    186 
    187 <h2 id="removing">Remoo de tarefas</h2>
    188 
    189 <p>Por padro, uma tarefa de documento  automaticamente removida da tela de viso geral quando a atividade
    190 termina. Esse comportamento pode ser substitudo com a classe {@link android.app.ActivityManager.AppTask},
    191 com um sinalizador {@link android.content.Intent} ou com um atributo <code><a href="{@docRoot}guide/topics/manifest/activity-element.html">
    192 &lt;activity&gt;</a></code>.</p>
    193 
    194 <p> possvel excluir inteiramente uma tarefa da tela de viso geral definindo o
    195 atributo <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> como {@code true}.</p>
    198 
    199 <p> possvel definir o nmero mximo de tarefas que o aplicativo pode incluir na tela de viso geral definindo
    200 o atributo <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> como um valor inteiro. O padro  16. Quando o nmero mximo de tarefas  atingido, a tarefa usada menos
    203 recentemente  removida da tela de viso geral. O valor mximo de {@code android:maxRecents}
    204  50 (25 em dispositivos com pouca memria); valores menores que 1 no so vlidos.</p>
    205 
    206 <h3 id="#apptask-remove">Uso da classe AppTask para remover tarefas</h3>
    207 
    208 <p>Na atividade que cria uma nova tarefa na tela de viso geral,  possvel
    209 especificar quando remover a tarefa e terminar todas as atividades associadas a ela chamando
    210 o mtodo {@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()}.</p>
    211 
    212 <p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html">
    213 NewDocumentActivity.java</a></p>
    214 <pre>
    215 public 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>Observao:</strong> o uso
    222 do mtodo {@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()}
    223 substitui o uso do sinalizador {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS}
    224 discutido abaixo.</p>
    225 
    226 <h3 id="#retain-finished">Reteno de tarefas terminadas</h3>
    227 
    228 <p>Se voc deseja reter uma tarefa na tela de viso geral, mesmo que a atividade tenha terminado, passe
    229 o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} no
    230 mtodo {@link android.content.Intent#addFlags(int) addFlags()} da Intent que inicia a atividade.</p>
    231 
    232 <p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html">
    233 DocumentCentricActivity.java</a></p>
    234 <pre>
    235 private 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>Para obter o mesmo efeito, defina o
    245 atributo <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> como {@code false}. O valor padro  {@code true}
    248 para atividades de documentos e {@code false} para atividades comuns. Usar esse atributo substitui
    249 o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} discutido anteriormente.</p>
    250 
    251 
    252 
    253 
    254 
    255 
    256 
    257