1 page.title=Tarefas e pilhas de retorno 2 parent.title=Atividades 3 parent.link=activities.html 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="#ActivityState">Gravao do estado da atividade</a></li></li> 12 <li><a href="#ManagingTasks">Gerenciamento de tarefas</a> 13 <ol> 14 <li><a href="#TaskLaunchModes">Definio de modos de inicializao</a></li> 15 <li><a href="#Affinities">Tratamento de afinidades</a></li> 16 <li><a href="#Clearing">Apagar a pilha de retorno</a></li> 17 <li><a href="#Starting">Incio de uma tarefa</a></li> 18 </ol> 19 </li> 20 </ol> 21 22 <h2>Artigos</h2> 23 <ol> 24 <li><a href="http://android-developers.blogspot.com/2010/04/multitasking-android-way.html"> 25 Multitarefa do modo Android</a></li> 26 </ol> 27 28 <h2>Veja tambm</h2> 29 <ol> 30 <li><a href="{@docRoot}design/patterns/navigation.html">Projeto para Android: 31 Navegao</a></li> 32 <li><a href="{@docRoot}guide/topics/manifest/activity-element.html">Elemento de manifesto 33 {@code <activity>}</a></li> 34 <li><a href="{@docRoot}guide/components/recents.html">Tela de viso geral</a></li> 35 </ol> 36 </div> 37 </div> 38 39 40 <p>Os aplicativos normalmente contm diversas <a href="{@docRoot}guide/components/activities.html">atividades</a>. Cada atividade 41 deve ser projetada com relao a tipos especficos de aes que o usurio pode realizar e que podem iniciar outras 42 atividades. Por exemplo: um aplicativo de e-mail pode ter uma atividade para exibir uma lista de novas mensagens. 43 Quando o usurio seleciona uma mensagem, uma nova atividade abre para exibir essa mensagem.</p> 44 45 <p>As atividades podem tambm iniciar atividades existentes em outros aplicativos no dispositivo. Por 46 exemplo: se o seu aplicativo deseja enviar um e-mail, possvel definir uma inteno para realizar 47 uma ao de "enviar" e incluir alguns dados, como um endereo de e-mail e uma mensagem. Uma atividade de outro 48 aplicativo que se declara para tratar deste tipo de intenes, ento, abre-se. Nesse caso, a inteno 49 destina-se ao envio de e-mails, portanto inicia-se uma atividade de composio" do aplicativo de e-mail (se diversas atividades 50 forem compatveis com a mesma inteno, o sistema permitir que o usurio selecione qual usar). Quando o e-mail 51 enviado, sua atividade reinicia, parecendo que a atividade de e-mail faz parte do seu aplicativo. Apesar 52 de as atividades serem de aplicativos diferentes, o Android mantm essa experincia 53 do usurio retilnea mantendo ambas as atividades na mesma <em>tarefa</em>.</p> 54 55 <p>Tarefas so colees de atividades com as quais os usurios interagem 56 ao realizar determinado trabalho. As atividades so organizadas em uma pilha (a <em>pilha de retorno</em>) 57 na ordem em que cada atividade aberta.</p> 58 59 <!-- SAVE FOR WHEN THE FRAGMENT DOC IS ADDED 60 <div class="sidebox-wrapper"> 61 <div class="sidebox"> 62 <h3>Adding fragments to a task's back stack</h3> 63 64 <p>Your activity can also include {@link android.app.Fragment}s to the back stack. For example, 65 suppose you have a two-pane layout using fragments, one of which is a list view (fragment A) and the 66 other being a layout to display an item from the list (fragment B). When the user selects an item 67 from the list, fragment B is replaced by a new fragment (fragment C). In this case, it might be 68 desireable for the user to navigate back to reveal fragment B, using the <em>Back</em> button.</p> 69 <p>In order to add fragment B to the back stack so that this is possible, you must call {@link 70 android.app.FragmentTransaction#addToBackStack addToBackStack()} before you {@link 71 android.app.FragmentTransaction#commit()} the transaction that replaces fragment B with fragment 72 C.</p> 73 <p>For more information about using fragments and adding them to the back stack, see the {@link 74 android.app.Fragment} class documentation.</p> 75 76 </div> 77 </div> 78 --> 79 80 <p>A tela inicial do dispositivo o ponto de partida para a maioria das tarefas. Quando o usurio toca em um cone no inicializador do 81 aplicativo 82 (ou em um atalho na tela inicial), essa tarefa do aplicativo acontece em primeiro plano. Se no 83 existir nenhuma tarefa para o aplicativo (se o aplicativo no tiver sido usado recentemente), uma nova tarefa 84 ser criada e a atividade "principal" daquele aplicativo abrir como a atividade raiz na pilha.</p> 85 86 <p>Quando a atividade atual inicia outra, a nova atividade colocada no topo da pilha 87 e recebe foco. A atividade anterior permanece na pilha, mas interrompida. Quando uma atividade 88 para, o sistema retm o estado atual da interface do usurio. Quando o usurio pressiona o boto 89 <em>Voltar</em> 90 , a atividade atual retirada do topo da pilha (a atividade destruda) 91 e a atividade anterior reinicia (o estado anterior da IU restaurado). Atividades na pilha nunca 92 so reorganizadas, somente colocadas e retiradas da pilha — colocadas na pilha quando iniciadas 93 pela atividade atual e retiradas quando o usurio se retira dela usando o boto <em>Voltar</em>. Desse modo, a pilha 94 de retorno 95 opera como uma estrutura de objeto UEPS (ltimo que entra, primeiro que sai). A figura 1 96 ilustra esse comportamento com uma linha cronolgica exibindo o progresso entre atividades junto com a pilha de retorno 97 atual em cada ponto no tempo.</p> 98 99 <img src="{@docRoot}images/fundamentals/diagram_backstack.png" alt="" /> 100 <p class="img-caption"><strong>Figura 1.</strong> Representao de como cada nova atividade 101 em uma tarefa adiciona um item pilha de retorno. Quando o usurio pressiona o boto <em>Voltar</em>, 102 a atividade atual 103 destruda e a atividade anterior reinicia.</p> 104 105 106 <p>Se o usurio continua pressionando <em>Voltar</em>, cada atividade na pilha retirada para 107 revelar 108 a anterior at que o usurio retorne tela inicial (ou a qualquer atividade que estivesse em execuo 109 no comeo da tarefa). Quando todas as atividades forem removidas da pilha, a tarefa no existir mais.</p> 110 111 <div class="figure" style="width:287px"> 112 <img src="{@docRoot}images/fundamentals/diagram_multitasking.png" alt="" /> <p 113 class="img-caption"><strong>Figura 2.</strong> Duas tarefas: a tarefa B recebe a interao do usurio 114 em primeiro plano enquanto a tarefa A est em segundo plano aguardando para ser retomada.</p> 115 </div> 116 <div class="figure" style="width:215px"> 117 <img src="{@docRoot}images/fundamentals/diagram_multiple_instances.png" alt="" /> <p 118 class="img-caption"><strong>Figura 3.</strong> Uma nica atividade instanciada diversas vezes.</p> 119 </div> 120 121 <p>As tarefas so unidades coesas que podem mover-se para "segundo plano" quando usurio inicia uma nova tarefa 122 ou ir para a tela inicial por meio do boto <em>Pgina inicial</em>. Quando em segundo plano, todas as atividades 123 da tarefa so 124 interrompidas, mas a pilha de retorno das tarefas continua intacta — a tarefa simplesmente perdeu o foco, 125 que foi para outra tarefa, como ilustrado na figura 2. Uma tarefa pode, ento, retornar ao "primeiro plano" para que os usurios 126 continuem de onde pararam. Suponha, por exemplo, que a tarefa atual (tarefa A) tenha trs 127 atividades na sua pilha — duas sob a atividade atual. O usurio pressiona o boto <em>Pgina inicial</em> e, 128 em seguida, 129 inicia um novo aplicativo no inicializador do aplicativo. Quando a tela inicial aparece, a tarefa A 130 vai para segundo plano. Quando o novo aplicativo inicia, o sistema inicia uma tarefa para este aplicativo 131 (tarefa B) com sua prpria pilha de atividades. Aps interagir 132 com este aplicativo, o usurio retorna Pgina inicial novamente e seleciona o aplicativo que originalmente 133 iniciou a tarefa A. Agora, a tarefa A fica 134 em primeiro plano — todas as trs atividades nas pilhas esto intactas e a atividade no topo 135 da pilha reinicia. Nesse 136 momento, o usurio pode alternar para a tarefa B acessando a Pgina inicial e selecionando o cone do aplicativo 137 que iniciou essa tarefa (ou selecionando a tarefa do aplicativo 138 na <a href="{@docRoot}guide/components/recents.html">tela de viso geral</a>). 139 Esse um exemplo de multitarefas no Android.</p> 140 141 <p class="note"><strong>Observao:</strong> vrias tarefas podem ser mantidas em segundo plano simultaneamente. 142 Contudo, se o usurio estiver executando diversas tarefas em segundo plano ao mesmo tempo, o sistema pode comear 143 a destruir atividades de segundo plano para recuperar memria, fazendo com que o estado das atividades seja perdido. 144 Consulte a seo a seguir sobre <a href="#ActivityState">Estado de atividades</a>.</p> 145 146 <p>Como as atividades na pilha de retorno nunca so reorganizadas, se o seu aplicativo permitir que 147 usurios iniciem uma determinada atividade a partir de mais de uma atividade, uma nova instncia 148 dela ser criada e colocada na pilha (em vez de trazer qualquer instncia anterior 149 dela para o topo). Assim, uma atividade no aplicativo pode ser instanciada diversas 150 vezes (mesmo a partir de diferentes tarefas), como ilustrado na figura 3. Assim, se o usurio navegar inversamente 151 usando o boto <em>Voltar</em>, as instncias da atividade sero revelada na ordem em que foram 152 abertas (cada uma 153 com o prprio estado da IU). No entanto, possvel modificar esse comportamento se voc no deseja que uma atividade seja 154 instanciada mais de uma vez. Esse assunto abordado na prxima seo sobre <a href="#ManagingTasks">Gerenciamento de tarefas</a>.</p> 155 156 157 <p>Para resumir o comportamento padro de atividades e tarefas:</p> 158 159 <ul> 160 <li>Quando a atividade A inicia a atividade B, a atividade A interrompida, mas o sistema retm seu estado 161 (como posio de rolagem e texto inserido em formulrios). 162 Se o usurio pressionar o boto <em>Voltar</em> na atividade B, a atividade A reiniciar com seu estado 163 restaurado.</li> 164 <li>Quando o usurio se retira de uma tarefa pressionando o boto <em>Pgina inicial</em>, a atividade atual 165 interrompida 166 e sua tarefa fica em segundo plano. O sistema retm o estado de cada atividade na tarefa. Se, 167 mais tarde, o usurio reiniciar a tarefa selecionando o cone de inicializao que a inicia, ela ficar 168 em primeiro plano e reiniciar a atividade no topo da pilha.</li> 169 <li>Se o usurio pressionar o boto <em>Voltar</em>, a atividade atual ser retirada da pilha 170 e 171 destruda. A atividade anterior na pilha retomada. Quando uma atividade destruda, o sistema 172 <em>no</em> retm seu estado.</li> 173 <li>As atividades podem ser instanciadas diversas vezes mesmo a partir de outras tarefas.</li> 174 </ul> 175 176 177 <div class="note design"> 178 <p><strong>Projeto de navegao</strong></p> 179 <p>Para saber mais sobre o funcionamento da navegao de aplicativos no Android, leia o guia <a href="{@docRoot}design/patterns/navigation.html">Navegao</a> do Projeto do Android.</p> 180 </div> 181 182 183 <h2 id="ActivityState">Gravao do estado da atividade</h2> 184 185 <p>Como discutido acima, o comportamento padro do sistema preserva o estado de uma atividade quando ela 186 interrompida. Desse modo, quando usurios navegam inversamente a uma atividade anterior, a interface do usurio aparece 187 na forma em que foi deixada. Entretanto, possvel — e <strong>recomendvel</strong> — reter proativamente 188 o estado das atividades usando mtodos de retorno de chamada nos casos em que a atividade destruda e deve 189 ser recriada.</p> 190 191 <p>Quando o sistema interrompe uma das atividades (como quando uma nova atividade inicia ou a tarefa 192 se move para segundo plano), o sistema pode destruir esta atividade completamente se precisar recuperar 193 a memria do sistema. Quando isso ocorre, as informaes sobre o estado da atividade so perdidas. Se isso acontecer, 194 o sistema ainda 195 saber que a atividade tem um lugar na pilha de retorno, mas quando a atividade for levada 196 ao topo da pilha, o sistema precisar recri-la (em vez de reinici-la). Para 197 evitar perder o trabalho do usurio, deve-se ret-la proativamente implementando 198 mtodos de retorno de chamada {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} 199 na atividade.</p> 200 201 <p>Para obter mais informaes sobre a gravao do estado da atividade, consulte o documento 202 <a href="{@docRoot}guide/components/activities.html#SavingActivityState">Atividades</a>.</p> 203 204 205 206 <h2 id="ManagingTasks">Gerenciamento de tarefas</h2> 207 208 <p>O modo com que o Android gerencia tarefas e a pilha de retorno, como descrito abaixo — posicionando todas 209 as atividades iniciadas em sucesso na mesma tarefa em uma pilha UEPS (ltimo que entra, primeiro que sai) — funciona 210 muito bem para a maioria dos aplicativo e no preciso preocupar-se com a associao das atividades 211 a tarefas ou como elas esto organizadas na pilha de retorno. No entanto, pode-se decidir interromper 212 o comportamento normal. Talvez voc deseje que uma atividade inicie uma nova tarefa no aplicativo ao ser 213 iniciada (em vez de ser colocada dentro da tarefa atual); ou, quando voc inicia uma atividade, deseja 214 apresentar uma instncia dela existente (em vez de criar uma nova 215 instncia no topo da pilha de retorno); ou talvez voc deseje que a pilha apague 216 todas as atividades, exceto a atividade raiz, quando o usurio sai da tarefa.</p> 217 218 <p> possvel fazer tudo isso e muito mais com atributos 219 no elemento <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> do manifesto 220 e com sinalizadores na inteno passada 221 a {@link android.app.Activity#startActivity startActivity()}.</p> 222 223 <p>Com relao a isso, os principais atributos <a href="{@docRoot}guide/topics/manifest/activity-element.html"> 224 {@code <activity>}</a> que podem ser usados so:</p> 225 226 <ul class="nolist"> 227 <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#aff"> 228 {@code taskAffinity}</a></li> 229 <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode"> 230 {@code launchMode}</a></li> 231 <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#reparent"> 232 {@code allowTaskReparenting}</a></li> 233 <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#clear"> 234 {@code clearTaskOnLaunch}</a></li> 235 <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#always"> 236 {@code alwaysRetainTaskState}</a></li> 237 <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#finish"> 238 {@code finishOnTaskLaunch}</a></li> 239 </ul> 240 241 <p>E os principais sinalizadores de inteno que podem ser usados so:</p> 242 243 <ul class="nolist"> 244 <li>{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}</li> 245 <li>{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP}</li> 246 <li>{@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP}</li> 247 </ul> 248 249 <p>Nas sees a seguir, voc ver como usar esses atributos de manifesto e sinalizadores 250 de inteno para definir como as atividades so associadas a tarefas e como elas se comportam na pilha de retorno.</p> 251 252 <p>Alm disso, so discutidas separadamente as consideraes sobre como tarefas e atividades podem ser representadas 253 e gerenciadas na tela de viso geral. Consulte <a href="{@docRoot}guide/components/recents.html">Tela de viso geral</a> 254 para obter mais informaes. Normalmente, preciso permitir que o sistema defina como as tarefas 255 e as atividades so representadas na tela de viso geral e no necessrio modificar esse comportamento.</p> 256 257 <p class="caution"><strong>Ateno:</strong> a maioria dos aplicativos no deve interromper o comportamento 258 padro de atividades e tarefas. Se voc determinar que necessrio modificar os comportamentos padro 259 da atividade, seja prudente e certifique-se de testar a capacidade de uso da atividade durante 260 a inicializao e ao navegar de volta para ela de outras atividades e tarefas com o boto <em>Voltar</em>. 261 Certifique-se de testar os comportamentos de navegao que podem entrar em conflito com o comportamento esperado pelo usurio.</p> 262 263 264 <h3 id="TaskLaunchModes">Definio de modos de inicializao</h3> 265 266 <p>Os modos de inicializao permitem definir a forma com que uma nova instncia de uma atividade associada 267 tarefa atual. Pode-se definir diferentes modos de inicializao de duas maneiras:</p> 268 <ul class="nolist"> 269 <li><a href="#ManifestForTasks">Usando o arquivo de manifesto</a> 270 <p>Ao declarar uma atividade em um arquivo de manifesto, pode-se especificar como a atividade 271 deve associar-se a tarefas quando ela inicia.</li> 272 <li><a href="#IntentFlagsForTasks">Usando sinalizadores de inteno</a> 273 <p>Ao chamar {@link android.app.Activity#startActivity startActivity()}, 274 possvel incluir um sinalizador na {@link android.content.Intent} que declara como 275 (ou se) a nova atividade deve associar-se tarefa atual.</p></li> 276 </ul> 277 278 <p>Assim, se a atividade A iniciar a atividade B, a atividade B poder definir no manifesto como 279 deve associar-se tarefa atual (se ocorrer) e a atividade A poder solicitar o modo pelo qual a atividade 280 B dever associar-se tarefa atual. Se ambas as atividades definem como a atividade B 281 deve associar-se a uma tarefa, a solicitao da atividade A (como definido na inteno) sobrepe 282 a solicitao da atividade B (como definido no seu manifesto).</p> 283 284 <p class="note"><strong>Observao:</strong> Alguns modos de inicializao disponveis para o arquivo de manifesto 285 no esto disponveis como sinalizadores para uma inteno e, do mesmo modo, alguns modos de inicializao disponveis como sinalizadores 286 de uma inteno no podem ser definidos no manifesto.</p> 287 288 289 <h4 id="ManifestForTasks">Uso do arquivo de manifesto</h4> 290 291 <p>Ao declarar uma atividade no arquivo de manifesto, pode-se especificar como a atividade 292 deve associar-se a tarefas usando o atributo <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code 293 launchMode}</a> do elemento 294 <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>.</p> 295 296 <p>O atributo <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code 297 launchMode}</a> especifica uma instruo sobre como a atividade deve ser inicializada 298 em uma tarefa. H quatro modos diferentes de inicializao que podem ser designados ao atributo 299 <code><a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">launchMode</a></code>: 300 </p> 301 302 <dl> 303 <dt>{@code "standard"} (o modo padro)</dt> 304 <dd>Padro. O sistema cria uma nova instncia da atividade na tarefa 305 pela qual foi iniciada e encaminha-lhe a inteno. A atividade pode ser instanciada diversas vezes; 306 cada instncia pode pertencer a diferentes tarefas e uma tarefa pode ter diversas instncias.</dd> 307 <dt>{@code "singleTop"}</dt> 308 <dd>Se uma instncia da atividade j existir no topo da tarefa atual, o sistema 309 encaminhar a inteno quela instncia por meio de uma chamada do mtodo {@link 310 android.app.Activity#onNewIntent onNewIntent()} em vez de criar uma nova instncia 311 da atividade. A atividade pode ser instanciada diversas vezes; cada instncia pode 312 pertencer a diferentes tarefas e uma tarefa pode ter diversas instncias (mas somente se 313 a atividade no topo da pilha de retorno <em>no</em> for uma instncia existente da atividade). 314 <p>Por exemplo: suponhamos que uma pilha de retorno da tarefa consista na atividade raiz A com as atividades B, C e 315 D no topo (a pilha A-B-C-D, com D no topo). Uma inteno chega de uma atividade de tipo D. 316 Se D for o modo de inicializao {@code "standard"} padro, uma nova instncia da classe ser inicializada 317 e a tarefa se tornar A-B-C-D-D. Entretanto, se o modo de inicializao de D for {@code "singleTop"}, a instncia existente 318 de D receber a inteno por {@link 319 android.app.Activity#onNewIntent onNewIntent()} porque ela est no topo da pilha — 320 a pilha permanece A-B-C-D. Contudo, se uma inteno chegar de uma atividade de tipo B, uma nova 321 instncia de B ser adicionada pilha, mesmo que o modo de inicializao seja {@code "singleTop"}.</p> 322 <p class="note"><strong>Observao:</strong> quando uma nova instncia de uma atividade criada, 323 o usurio pode pressionar o boto <em>Voltar</em> para retornar atividade anterior. Porm, quando uma 324 instncia 325 existente de uma atividade trata de uma nova inteno, o usurio no pode pressionar o boto <em>Voltar</em> para retornar 326 ao estado 327 da atividade antes que a nova inteno chegue em {@link android.app.Activity#onNewIntent 328 onNewIntent()}.</p> 329 </dd> 330 331 <dt>{@code "singleTask"}</dt> 332 <dd>O sistema cria uma nova tarefa e instancia a atividade em sua raiz. 333 Entretanto, se uma instncia da atividade j existir em uma tarefa separada, o sistema encaminhar 334 a inteno quela instncia por meio de uma chamada do mtodo {@link 335 android.app.Activity#onNewIntent onNewIntent()} em vez de criar uma nova instncia. Somente 336 uma instncia da atividade pode existir por vez. 337 <p class="note"><strong>Observao:</strong> embora a atividade inicie em uma nova tarefa, o boto 338 <em>Voltar</em> ainda direciona o usurio atividade anterior.</p></dd> 339 <dt>{@code "singleInstance"}.</dt> 340 <dd>Igual {@code "singleTask"}, exceto que o sistema no inicializa nenhuma outra atividade 341 na tarefa que contm a instncia. A atividade sempre o nico e exclusivo membro de sua tarefa; 342 toda atividade iniciada por ela abre em uma tarefa separada.</dd> 343 </dl> 344 345 346 <p>Outro exemplo: o aplicativo Navegador do Android declara que a atividade do navegador da web deve 347 sempre abrir na prpria tarefa — especificando o modo de inicializao {@code singleTask} no elemento <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>. 348 Isso significa que, se o aplicativo emite uma 349 inteno para abrir o navegador do Android, sua atividade <em>no</em> colocada na mesma 350 tarefa do aplicativo. Em vez disso, uma nova tarefa inicia para o navegador ou, se o navegador 351 j possui uma tarefa em execuo em segundo plano, essa tarefa colocada em primeiro plano para tratar a nova 352 inteno.</p> 353 354 <p>Se uma atividade inicia em uma nova tarefa ou na mesma tarefa que a atividade que 355 a iniciou, o boto <em>Voltar</em> sempre direciona o usurio atividade anterior. Porm, se voc 356 iniciar uma atividade que especifica o modo de inicializao {@code singleTask} e se uma instncia 357 dessa atividade existir em uma tarefa de segundo plano, toda a tarefa ser colocada em primeiro plano. Nesse 358 momento, a pilha de retorno conter todas as atividades da tarefa colocada em primeiro plano 359 no topo. A figura 4 ilustra essa situao.</p> 360 361 <img src="{@docRoot}images/fundamentals/diagram_backstack_singletask_multiactivity.png" alt="" /> 362 <p class="img-caption"><strong>Figura 4.</strong> Representao de como uma atividade 363 com modo de inicializao "singleTask" adicionada pilha de retorno. Se a atividade j for parte de uma tarefa 364 de segundo plano com a prpria pilha de retorno, toda a pilha tambm vir 365 para primeiro plano, no topo da tarefa atual.</p> 366 367 <p>Para obter mais informaes sobre o uso de modos de inicializao no arquivo de manifesto, consulte a documentao do elemento 368 <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> 369 , onde o atributo {@code launchMode} e os valores aceitos 370 so discutidos mais aprofundadamente.</p> 371 372 <p class="note"><strong>Observao:</strong> os comportamentos a especificar para a atividade com o atributo <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> 373 podem ser neutralizados por sinalizadores includos na inteno que inicia a atividade, conforme abordado 374 na prxima seo.</p> 375 376 377 378 <h4 id="#IntentFlagsForTasks">Uso de sinalizadores de inteno</h4> 379 380 <p>Ao iniciar uma atividade, possvel modificar a associao padro de uma atividade tarefa 381 incluindo sinalizadores na inteno fornecida a {@link 382 android.app.Activity#startActivity startActivity()}. Os sinalizadores que podem ser usados para modificar 383 o comportamento padro so:</p> 384 385 <p> 386 <dt>{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}</dt> 387 <dd>Inicia a atividade em uma nova tarefa. Se uma tarefa j estiver em execuo para a atividade que voc est 388 iniciando agora, ela ser colocada em primeiro plano com o ltimo estado restaurado e a atividade 389 receber a nova inteno em {@link android.app.Activity#onNewIntent onNewIntent()}. 390 <p>Isso produz o mesmo comportamento que o valor {@code "singleTask"} do <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a>, 391 abordado na seo anterior.</p></dd> 392 <dt>{@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP}</dt> 393 <dd>Se a atividade iniciada for a atual (no topo da pilha de retorno), 394 a instncia existente receber uma chamada de {@link android.app.Activity#onNewIntent onNewIntent()} 395 em vez de criar uma nova instncia da atividade. 396 <p>Isso produz o mesmo comportamento que o valor {@code "singleTop"} do <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> 397 abordado na seo anterior.</p></dd> 398 <dt>{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP}</dt> 399 <dd>Se a atividade iniciada j estiver em execuo na tarefa atual, em vez 400 de lanar uma nova instncia daquela atividade, todas as outras atividades no topo dela sero 401 destrudas e essa inteno ser entregue instncia reiniciada da atividade (agora no topo) 402 por {@link android.app.Activity#onNewIntent onNewIntent()}. 403 <p>No h nenhum valor para o atributo <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> 404 que produza esse comportamento.</p> 405 <p>{@code FLAG_ACTIVITY_CLEAR_TOP} mais usado em conjunto com 406 {@code FLAG_ACTIVITY_NEW_TASK}. 407 Quando usados juntos, estes sinalizadores so o modo de localizar uma atividade existente 408 em outra tarefa e coloc-la em uma posio em que possa responder inteno. </p> 409 <p class="note"><strong>Observao:</strong> se o modo de inicializao da atividade designada for 410 {@code "standard"}, 411 ela tambm ser removida da pilha e uma nova instncia ser iniciada em seu lugar para tratar 412 a inteno recebida. Isso se deve ao fato de que uma nova instncia sempre criada para uma nova inteno quando o 413 modo de inicializao {@code "standard"}. </p> 414 </dd> 415 </dl> 416 417 418 419 420 421 <h3 id="Affinities">Tratamento de afinidades</h3> 422 423 <p>A <em>afinidade</em> indica a que tarefa uma atividade prefere pertencer. Por padro, todas 424 as atividades do mesmo aplicativo tm afinidade entre si. Assim, por padro, todas 425 as atividades no mesmo aplicativo preferem estar na mesma tarefa. Contudo, possvel modificar 426 a afinidade padro de uma atividade. Atividades definidas 427 em aplicativos diferentes podem compartilhar uma afinidade, ou atividades definidas no mesmo aplicativo podem ter 428 diferentes afinidades de tarefa atribudas.</p> 429 430 <p> possvel modificar a afinidade de qualquer atividade com o atributo <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a> 431 do elemento 432 <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>.</p> 433 434 <p>O atributo <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a> 435 recebe um valor de string que deve ser exclusivo do nome do pacote padro 436 declarado no elemento <a href="{@docRoot}guide/topics/manifest/manifest-element.html"> 437 {@code <manifest>} 438 </a> porque o sistema usa esse nome para identificar a afinidade 439 de tarefa padro do aplicativo.</p> 440 441 <p>A afinidade tem relevncia em duas circunstncias:</p> 442 <ul> 443 <li>Quando a inteno que inicializa uma atividade contm 444 o sinalizador 445 {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}. 446 447 <p>Uma nova atividade , por padro, inicializada na tarefa da atividade 448 que chamou {@link android.app.Activity#startActivity startActivity()}. Ela colocada na mesma 449 pilha de retorno do autor da chamada. Contudo, se a inteno passada a 450 {@link android.app.Activity#startActivity startActivity()} 451 contiver o sinalizador {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK} 452 , o sistema procurar uma tarefa diferente para comportar a nova atividade. Na maioria das vezes, uma nova tarefa. 453 Porm, isso no obrigatrio. Se j houver uma tarefa com a mesma afinidade 454 da nova atividade, ela ser inicializada naquela tarefa. Caso contrrio, ela iniciar uma nova tarefa.</p> 455 456 <p>Se esse sinalizador fizer com que uma atividade inicie uma nova tarefa e se o usurio pressionar o boto <em>Pgina inicial</em> 457 para sair dela, 458 ser necessrio ter um modo de o usurio navegar de volta tarefa. Algumas entidades (como 459 o gerenciador de notificao) sempre iniciam atividades em tarefas externas, nunca como parte de si mesmas, por isso 460 elas sempre colocam {@code FLAG_ACTIVITY_NEW_TASK} nas intenes que passam 461 a {@link android.app.Activity#startActivity startActivity()}. 462 Se voc tiver uma atividade que possa ser chamada 463 por uma entidade externa que possa usar este sinalizador, certifique-se de que o usurio tenha um modo independente 464 de voltar tarefa iniciada, como com um cone de inicializao (a atividade raiz da tarefa 465 tem um filtro de intenes {@link android.content.Intent#CATEGORY_LAUNCHER}; consulte a seo <a href="#Starting">Incio de uma tarefa</a> abaixo).</p> 466 </li> 467 468 <li>Quando uma atividade tem o atributo <a href="{@docRoot}guide/topics/manifest/activity-element.html#reparent"> 469 {@code allowTaskReparenting}</a> definido como {@code "true"}. 470 <p>Nesse caso, a atividade pode mover-se da tarefa que iniciou para a tarefa afim 471 quando for colocada em primeiro plano.</p> 472 <p>Por exemplo: suponhamos que uma atividade que relate condies do clima em cidades selecionadas seja 473 definida como parte de um aplicativo de viagens. Ela tem a mesma afinidade que outras atividades no mesmo 474 aplicativo (a afinidade padro do aplicativo) e permite a redefinio da hierarquia com esse atributo. 475 Quando uma das atividades inicia a atividade de notificao de clima, ela inicialmente pertence mesma 476 tarefa de sua atividade. Porm, quando a tarefa do aplicativo de viagens colocada em primeiro plano, 477 a atividade de notificao de clima reatribuda a essa tarefa e exibida dentro dela.</p> 478 </li> 479 </ul> 480 481 <p class="note"><strong>Dica:</strong> se um arquivo {@code .apk} contiver mais de um "aplicativo" 482 do ponto de vista do usurio, voc provavelmente desejar usar o atributo <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a> 483 para designar diferentes afinidades s atividades associadas a cada "aplicativo".</p> 484 485 486 487 <h3 id="Clearing">Apagar a pilha de retorno</h3> 488 489 <p>Se o usurio sair de uma tarefa por muito tempo, o sistema apagar a tarefa de todas as atividades exceto 490 a da atividade raiz. Quando o usurio retornar tarefa, somente a atividade raiz ser restaurada. 491 O sistema comporta-se dessa maneira porque, aps longo tempo de uso, os usurios provavelmente abandonaram 492 o que estavam fazendo antes e so direcionados de volta tarefa para comear algo novo. </p> 493 494 <p>H alguns atributos de atividade que podem ser usados para modificar esse comportamento: </p> 495 496 <dl> 497 <dt><code><a 498 href="{@docRoot}guide/topics/manifest/activity-element.html#always">alwaysRetainTaskState</a></code> 499 </dt> 500 <dd>Se esse atributo for definido como {@code "true"} na atividade raiz de uma tarefa, 501 o comportamento padro descrito no acontecer. 502 A tarefa reter todas as atividades em sua pilha mesmo aps um longo perodo.</dd> 503 504 <dt><code><a 505 href="{@docRoot}guide/topics/manifest/activity-element.html#clear">clearTaskOnLaunch</a></code></dt> 506 <dd>Se esse atributo for definido como {@code "true"} na atividade raiz de uma tarefa, 507 a pilha ser apagada da atividade raiz sempre que o usurio sair da tarefa 508 e retornar a ela. Em outras palavras, o oposto de 509 <a href="{@docRoot}guide/topics/manifest/activity-element.html#always"> 510 {@code alwaysRetainTaskState}</a>. O usurio sempre retorna tarefa 511 no estado inicial, mesmo ao retirar-se da tarefa somente por um momento.</dd> 512 513 <dt><code><a 514 href="{@docRoot}guide/topics/manifest/activity-element.html#finish">finishOnTaskLaunch</a></code> 515 </dt> 516 <dd>Esse atributo como <a href="{@docRoot}guide/topics/manifest/activity-element.html#clear">{@code clearTaskOnLaunch}</a>, 517 mas opera 518 em uma nica atividade, e no em uma tarefa inteira. Ele tambm apaga todas as atividades, 519 inclusive a atividade raiz. Quando definido como {@code "true"}, 520 a atividade permanece parte da tarefa somente para a sesso atual. Se o usurio 521 retirar-se e, em seguida, retornar tarefa, ela no estar mais presente.</dd> 522 </dl> 523 524 525 526 527 <h3 id="Starting">Incio de uma tarefa</h3> 528 529 <p> possvel configurar uma atividade como ponto de entrada de uma tarefa fornecendo-lhe um filtro de intenes 530 com {@code "android.intent.action.MAIN"} como a ao especificada 531 e {@code "android.intent.category.LAUNCHER"} 532 como a categoria especificada. Por exemplo:</p> 533 534 <pre> 535 <activity ... > 536 <intent-filter ... > 537 <action android:name="android.intent.action.MAIN" /> 538 <category android:name="android.intent.category.LAUNCHER" /> 539 </intent-filter> 540 ... 541 </activity> 542 </pre> 543 544 <p>Um filtro de intenes desse tipo faz com que um cone e o rtulo 545 da atividade sejam exibidos no inicializador do aplicativo, fornecendo aos usurios um modo de inicializar a atividade 546 e de retornar tarefa criada a qualquer tempo aps sua inicializao. 547 </p> 548 549 <p>Este segundo recurso importante: preciso que os usurios possam sair de uma tarefa e voltar a ela 550 mais tarde usando esse inicializador de atividades. Por isso, os dois <a href="#LaunchModes">modos 551 de inicializao</a> que marcam atividades como sempre iniciando uma tarefa ({@code "singleTask"} e 552 {@code "singleInstance"}) devem ser usados somente quando a atividade tiver um filtro 553 {@link android.content.Intent#ACTION_MAIN} 554 e um {@link android.content.Intent#CATEGORY_LAUNCHER}. Imagine, por exemplo, o que 555 aconteceria se o filtro no estivesse presente: uma inteno inicializaria uma atividade {@code "singleTask"}, iniciando uma 556 nova tarefa, e o usurio perderia algum tempo trabalhando nessa tarefa. O usurio, ento, pressiona o boto 557 <em>Pgina inicial</em>. A tarefa enviada para segundo plano e no fica mais visvel. O usurio no tem como voltar 558 tarefa porque ela no representada no inicializador do aplicativo.</p> 559 560 <p>Para esses casos em que se deseja que o usurio no seja capaz de retornar a uma atividade, defina 561 <a href="{@docRoot}guide/topics/manifest/activity-element.html#finish">{@code finishOnTaskLaunch}</a> 562 do elemento 563 <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> 564 como {@code "true"} (consulte <a href="#Clearing">Apagar a pilha</a>).</p> 565 566 <p>Veja mais informaes sobre a representao e o gerenciamento de atividades 567 na tela de viso geral em <a href="{@docRoot}guide/components/recents.html"> 568 Tela de viso geral</a>.</p> 569 570 <!-- 571 <h2>Beginner's Path</h2> 572 573 <p>For more information about how to use intents to 574 activate other application components and publish the intents to which your components 575 respond, continue with the <b><a 576 href="{@docRoot}guide/components/intents-filters.html">Intents and Intent 577 Filters</a></b> document.</p> 578 --> 579