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 <activity></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"><activity></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 @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 @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"><activity></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 <activity></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"><activity></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"><activity></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"><activity></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