Home | History | Annotate | Download | only in components
      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 &lt;activity&gt;}</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 &mdash; 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 &mdash; 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 &mdash; 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 &mdash; 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 &mdash; e <strong>recomendvel</strong> &mdash; 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 &mdash; posicionando todas
    209 as atividades iniciadas em sucesso na mesma tarefa em uma pilha UEPS (ltimo que entra, primeiro que sai) &mdash; 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 &lt;activity&gt;}</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 &lt;activity&gt;}</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 &lt;activity&gt;}</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 &mdash;
    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 &mdash; especificando o modo de inicializao {@code singleTask} no elemento <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</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">&lt;activity&gt;</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 &lt;activity&gt;}</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 &lt;manifest&gt;}
    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 &lt;activity ... &gt;
    536     &lt;intent-filter ... &gt;
    537         &lt;action android:name="android.intent.action.MAIN" /&gt;
    538         &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
    539     &lt;/intent-filter&gt;
    540     ...
    541 &lt;/activity&gt;
    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">&lt;activity&gt;</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