Home | History | Annotate | Download | only in components
      1 page.title=Atividades
      2 page.tags=atividade,inteno
      3 @jd:body
      4 
      5 <div id="qv-wrapper">
      6 <div id="qv">
      7 <h2>Neste documento</h2>
      8 <ol>
      9   <li><a href="#Creating">Criao de uma atividade</a>
     10     <ol>
     11       <li><a href="#UI">Implementao de uma interface do usurio</a></li>
     12       <li><a href="#Declaring">Declarao de uma atividade no manifesto</a></li>
     13     </ol>
     14   </li>
     15   <li><a href="#StartingAnActivity">Incio de uma atividade</a>
     16     <ol>
     17       <li><a href="#StartingAnActivityForResult">Incio de uma atividade de um resultado</a></li>
     18     </ol>
     19   </li>
     20   <li><a href="#ShuttingDown">Encerramento de uma atividade</a></li>
     21   <li><a href="#Lifecycle">Gerenciamento do ciclo de vida da atividade</a>
     22     <ol>
     23       <li><a href="#ImplementingLifecycleCallbacks">Implementao de retornos de chamada do ciclo de vida</a></li>
     24       <li><a href="#SavingActivityState">Gravao do estado da atividade</a></li>
     25       <li><a href="#ConfigurationChanges">Manipulao de alteraes de configurao</a></li>
     26       <li><a href="#CoordinatingActivities">Coordenao de atividades</a></li>
     27     </ol>
     28   </li>
     29 </ol>
     30 
     31 <h2>Classes principais</h2>
     32 <ol>
     33   <li>{@link android.app.Activity}</li>
     34 </ol>
     35 
     36 <h2>Veja tambm</h2>
     37 <ol>
     38   <li><a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tarefas e pilha
     39 de retorno</a></li>
     40 </ol>
     41 
     42 </div>
     43 </div>
     44 
     45 
     46 
     47 <p>{@link android.app.Activity}  um componente de aplicativo que fornece uma tela com a qual
     48 os usurios podem interagir para fazer algo, como discar um nmero no telefone, tirar uma foto, enviar um e-mail
     49 ou ver um mapa. Cada atividade recebe uma janela que exibe a interface do usurio. Geralmente, a janela
     50 preenche a tela, mas pode ser menor que a tela e flutuar
     51 sobre outras janelas.</p>
     52 
     53 <p> Aplicativos geralmente possuem vrias atividades pouco vinculadas
     54 entre si. Normalmente, uma atividade em um aplicativo  especificada como "principal",
     55 que  a apresentada ao usurio ao iniciar o aplicativo pela primeira vez. Cada
     56 atividade pode, ento, iniciar outra atividade para executar diferentes aes. Ao iniciar uma nova
     57 atividade, a atividade anterior  interrompida, mas o sistema conserva a atividade
     58 em uma pilha (a "pilha de retorno"). Quando uma atividade inicia, ela  enviada para a pilha de retorno
     59 e obtm o foco do usurio. A pilha de retorno segue o mecanismo bsico de pilha UEPS (o ltimo que entra  o primeiro que sai).
     60 Assim, quando o usurio terminar a atividade atual e apertar o boto <em>Voltar</em>,
     61 ela sair da pilha ( destruda) e a atividade anterior ser retomada (a pilha de retorno
     62  discutida em mais detalhes no documento <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tarefas
     63 e Pilha de Retorno</a>).</p>
     64 
     65 <p>Quando uma atividade  interrompida devido ao incio de uma nova atividade, ela  notificada acerca dessa alterao de estado
     66 por meio de mtodos de retorno de chamada do ciclo de vida da atividade.
     67 H diversos mtodos de retorno de chamada que uma atividade pode receber devido a uma alterao
     68 em seu estado &mdash; quando o sistema a est criando, interrompendo, retomando ou destruindo &mdash; e cada
     69 retorno de chamada oferece uma oportunidade de executar trabalhos especficos
     70 adequados a essa alterao de estado. Por exemplo: quando interrompida, a atividade deve liberar
     71 todos os objetos grandes, como conexes com a rede ou com um banco de dados. Quando a atividade for retomada, ser possvel
     72 readquirir os recursos necessrios e retomar as aes interrompidas. Essas transies de estado
     73 so parte do ciclo de vida da atividade.</p>
     74 
     75 <p>O restante deste documento discute o bsico sobre a compilao e o uso de uma atividade,
     76 incluindo uma discusso completa sobre o funcionamento do ciclo de vida da atividade para gerenciar adequadamente
     77 a transio entre os diversos estados da atividade.</p>
     78 
     79 
     80 
     81 <h2 id="Creating">Criao de uma atividade</h2>
     82 
     83 <p>Para criar uma atividade,  preciso criar uma subclasse de {@link android.app.Activity}
     84 (ou uma respectiva subclasse existente). Na subclasse,  preciso implementar um mtodo de retorno de chamada
     85 que o sistema chama quando ocorre a transio entre os diversos estados de seu ciclo de vida,
     86 como na criao, interrupo, retomada ou destruio da atividade. Os dois mtodos mais importantes
     87 de retorno de chamada so:</p>
     88 
     89 <dl>
     90   <dt>{@link android.app.Activity#onCreate onCreate()}</dt>
     91   <dd> preciso implementar esse mtodo. O sistema o chama ao criar
     92 a atividade. Na implementao,  preciso inicializar os componentes essenciais
     93 da atividade.
     94     E, fundamentalmente,  quando se deve chamar {@link android.app.Activity#setContentView
     95 setContentView()} para definir o layout da interface do usurio da atividade.</dd>
     96   <dt>{@link android.app.Activity#onPause onPause()}</dt>
     97   <dd>O sistema chama esse mtodo como o primeiro indcio de que o usurio est saindo
     98 da atividade (embora no seja sempre uma indicao de que a atividade ser destruda).  quando geralmente
     99 se deve confirmar qualquer alterao que deva persistir alm da sesso do usurio atual (porque
    100 o usurio pode no retornar).</dd>
    101 </dl>
    102 
    103 <p>H outros mtodos de retorno de chamada do ciclo de vida que se pode usar para oferecer
    104 uma experincia fluida ao usurio entre atividades e manipular interrupes inesperadas que venham a parar
    105 ou at a destruir a atividade. Todos os mtodos de retorno de chamada do ciclo de vida sero discutidos mais adiante
    106 na seo sobre <a href="#Lifecycle">Gerenciamento do ciclo de vida da atividade</a>.</p>
    107 
    108 
    109 
    110 <h3 id="UI">Implementao de uma interface do usurio</h3>
    111 
    112 <p> A interface do usurio de uma atividade  fornecida por uma hierarquia de objetos &mdash; de vistas derivados
    113 da classe {@link android.view.View}.  Cada vista controla um espao retangular especfico
    114 dentro da janela da atividade e pode responder  interao com o usurio. Por exemplo: uma vista pode ser
    115 um boto que inicia uma ao quando o usurio toca nele.</p>
    116 
    117 <p>O Android oferece algumas vistas prontas que podem ser usadas para projetar e organizar
    118 o layout. "Widgets" so vistas que fornecem elementos visuais (e interativos)  tela,
    119 como um boto, um campo de texto, uma caixa de seleo ou apenas uma imagem. "Layouts" so vistas derivadas de {@link
    120 android.view.ViewGroup} que oferecem um modelo de layout exclusivo para suas vistas filhas,
    121 como um layout linear, um layout em grade ou um layout relativo. Tambm  possvel definir como subclasse as classes
    122 {@link android.view.View} e {@link android.view.ViewGroup} (ou subclasses existentes) para criar widgets e layouts prprios
    123 e aplic-los no layout da atividade.</p>
    124 
    125 <p>A forma mais comum de definir um layout usando vistas  com um arquivo de layout XML salvo
    126 nos recursos do aplicativo. Assim,  possvel manter o projeto da interface do usurio separado
    127 do cdigo fonte que define o comportamento da atividade.  possvel definir o layout como a IU da atividade
    128 com {@link android.app.Activity#setContentView(int) setContentView()}, passando
    129 o ID de recurso do layout. No entanto, tambm  possvel criar novas {@link android.view.View}s
    130 no cdigo da atividade e compilar uma hierarquia de vistas inserindo novas {@link
    131 android.view.View}s em um {@link android.view.ViewGroup} e, em seguida, usar esse layout passando a raiz
    132 {@link android.view.ViewGroup} para {@link android.app.Activity#setContentView(View)
    133 setContentView()}.</p>
    134 
    135 <p>Para obter mais informaes sobre a criao de uma interface do usurio, consulte a documentao <a href="{@docRoot}guide/topics/ui/index.html">Interface do Usurio</a>.</p>
    136 
    137 
    138 
    139 <h3 id="Declaring">Declarao de uma atividade no manifesto</h3>
    140 
    141 <p> preciso declarar a atividade no arquivo de manifesto para torn-la
    142 acessvel para o sistema. Para declarar a atividade, abra o arquivo de manifesto e adicione um elemento <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
    143 como filho do elemento
    144 <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>. Por exemplo:</p>
    145 
    146 <pre>
    147 &lt;manifest ... &gt;
    148   &lt;application ... &gt;
    149       &lt;activity android:name=".ExampleActivity" /&gt;
    150       ...
    151   &lt;/application ... &gt;
    152   ...
    153 &lt;/manifest &gt;
    154 </pre>
    155 
    156 <p>Existem outros atributos que podem ser includos nesse elemento para definir propriedades
    157 como o rtulo da atividade, um cone para a atividade ou um tema para estilizar a IU da atividade.
    158  O atributo <a href="{@docRoot}guide/topics/manifest/activity-element.html#nm">{@code android:name}</a>
    159   o nico atributo obrigatrio &mdash; ele especifica o nome de classe da atividade. Depois
    160 de publicar o aplicativo, no se deve alterar-lhe o nome porque, se isso acontecer, podem ocorrer danos
    161 em algumas funcionalidades, como os atalhos do aplicativo (leia a publicao do blogue <a href="http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html">Coisas
    162 que no podem mudar</a>).</p>
    163 
    164 <p>Consulte a referncia do elemento <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
    165 para obter mais informaes sobre como declarar a atividade no manifesto.</p>
    166 
    167 
    168 <h4>Uso de filtros de intenes</h4>
    169 
    170 <p>Um elemento <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
    171 &lt;activity&gt;}</a> tambm pode especificar vrios filtros de intenes &mdash; usando o elemento <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
    172 &lt;intent-filter&gt;}</a> &mdash; para declarar o modo com que os componentes de aplicativo
    173 podem ativ-lo.</p>
    174 
    175 <p>Ao criar um novo aplicativo com as ferramentas do Android SDK, o esboo da atividade
    176 criado contm automaticamente um filtro de inteno que declara que a atividade responde
    177  ao "main" (principal) e deve ser colocada na categoria "launcher (inicializador). O filtro de inteno
    178 tem a seguinte aparncia:</p>
    179 
    180 <pre>
    181 &lt;activity android:name=".ExampleActivity" android:icon="@drawable/app_icon"&gt;
    182     &lt;intent-filter&gt;
    183         &lt;action android:name="android.intent.action.MAIN" /&gt;
    184         &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
    185     &lt;/intent-filter&gt;
    186 &lt;/activity&gt;
    187 </pre>
    188 
    189 <p>O elemento <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
    190 &lt;action&gt;}</a> especifica que este  o principal ponto de entrada do aplicativo. O elemento <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
    191 &lt;category&gt;}</a> especifica que essa atividade deve ser listada no inicializador do aplicativo
    192 do sistema (para permitir que os usurios iniciem essa atividade).</p>
    193 
    194 <p>Se pretende-se que o aplicativo seja autnomo e que no permita que outros aplicativos ativem
    195 suas atividades, no ser necessrio nenhum outro filtro de inteno. S uma atividade deve ter
    196 a ao "main" e a categoria "launcher", como no exemplo anterior. As atividades
    197 que no devem estar disponveis a outros aplicativos no devem ter filtros de inteno, j que  possvel
    198 inici-las por meio de intenes explcitas (conforme discutido na seo a seguir).</p>
    199 
    200 <p>No entanto, se a atividade deve responder a intenes implcitas derivadas de outros aplicativos
    201 (e do aplicativo em questo),  preciso definir filtros de intenes adicionais
    202 para a atividade. Para cada tipo de inteno que deve responder,  preciso incluir um <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
    203 &lt;intent-filter&gt;}</a> que contenha um elemento
    204 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
    205 &lt;action&gt;}</a> e, opcionalmente, um elemento <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
    206 &lt;category&gt;}</a> e/ou um elemento <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
    207 &lt;data&gt;}</a>. Esses elementos especificam o tipo de inteno a que a atividade pode
    208 responder.</p>
    209 
    210 <p>Para obter mais informaes sobre a forma com que as atividades podem responder a intenes, consulte o documento
    211 <a href="{@docRoot}guide/components/intents-filters.html">Intenes e filtros de intenes</a>.</p>
    212 
    213 
    214 
    215 <h2 id="StartingAnActivity">Incio de uma atividade</h2>
    216 
    217 <p>Para iniciar outra atividade,  possvel chamar {@link android.app.Activity#startActivity
    218 startActivity()} passando uma {@link android.content.Intent} que descreva a atividade
    219 que se deseja iniciar. A inteno especifica a atividade exata que deve ser iniciada ou descreve o tipo
    220 de ao que ela deve executar (e o sistema seleciona a atividade adequada,
    221 que
    222 pode ser at de um outro aplicativo). Uma inteno tambm pode portar pequenas quantidades de dados
    223 a serem usados pela atividade iniciada.</p>
    224 
    225 <p>Ao trabalhar no aplicativo, frequentemente ser necessrio iniciar uma atividade conhecida.
    226  Para isso, pode-se criar uma inteno que defina explicitamente a atividade que deve ser iniciada
    227 por meio de um nome de classe. Por exemplo, a seguir  demonstrado como uma atividade inicia outra atividade de nome {@code
    228 SignInActivity}:</p>
    229 
    230 <pre>
    231 Intent intent = new Intent(this, SignInActivity.class);
    232 startActivity(intent);
    233 </pre>
    234 
    235 <p>No entanto, o aplicativo tambm pode ter que executar algumas aes, como enviar um e-mail,
    236 mensagem de texto ou atualizao de status usando os dados da atividade em questo. Nesse caso, o aplicativo
    237 pode no ter suas prprias atividades para executar tais aes; para isso, pode-se aproveitar as atividades
    238 fornecidas por outros aplicativos do dispositivo que podem executar essas aes. Esses so os casos
    239 em que as intenes so muito importantes &mdash;  possvel criar uma inteno que descreva
    240 uma ao a executar para que o sistema
    241 inicie a atividade apropriada de outro aplicativo. Se houver
    242 mais de uma atividade que possa manipular a inteno, o usurio poder escolher qual usar. Por exemplo:
    243  se quiser que o usurio envie uma mensagem de e-mail,  possvel criar
    244 a seguinte inteno:</p>
    245 
    246 <pre>
    247 Intent intent = new Intent(Intent.ACTION_SEND);
    248 intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
    249 startActivity(intent);
    250 </pre>
    251 
    252 <p>O {@link android.content.Intent#EXTRA_EMAIL} adicionado  inteno  uma matriz de sequncia
    253 de endereos de e-mail para os quais o e-mail poder ser enviado. Quando um aplicativo de e-mail responde  essa inteno,
    254 ele l a matriz de sequncia fornecida no extra e a coloca no campo "para"
    255 do formulrio de composio do e-mail. Nessa situao, a atividade do aplicativo de e-mail inicia e, quando o usurio termina o trabalho,
    256 sua atividade  retomada.</p>
    257 
    258 
    259 
    260 
    261 <h3 id="StartingAnActivityForResult">Incio de uma atividade para um resultado</h3>
    262 
    263 <p>s vezes,  necessrio receber um resultado de alguma atividade iniciada. Nesse caso,
    264  inicie a atividade chamando {@link android.app.Activity#startActivityForResult
    265 startActivityForResult()} (em vez de {@link android.app.Activity#startActivity
    266  startActivity()}). Para receber o resultado de uma atividade
    267 subsequente, implemente o mtodo de retorno de chamada
    268 {@link android.app.Activity#onActivityResult onActivityResult()}. Quando a atividade subsequente estiver concluda, ela retornar um resultado em uma {@link
    269 android.content.Intent} para o mtodo
    270 {@link android.app.Activity#onActivityResult onActivityResult()}.</p>
    271 
    272 <p>Por exemplo, talvez voc queira que o usurio escolha um dos contatos dele, deste modo, a atividade poder
    273 fazer algo com as informaes naquele contato. A seguir expe-se como criar uma inteno desse tipo
    274 e manipular o resultado:</p>
    275 
    276 <pre>
    277 private void pickContact() {
    278     // Create an intent to "pick" a contact, as defined by the content provider URI
    279     Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
    280     startActivityForResult(intent, PICK_CONTACT_REQUEST);
    281 }
    282 
    283 &#64;Override
    284 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    285     // If the request went well (OK) and the request was PICK_CONTACT_REQUEST
    286     if (resultCode == Activity.RESULT_OK &amp;&amp; requestCode == PICK_CONTACT_REQUEST) {
    287         // Perform a query to the contact's content provider for the contact's name
    288         Cursor cursor = getContentResolver().query(data.getData(),
    289         new String[] {Contacts.DISPLAY_NAME}, null, null, null);
    290         if (cursor.moveToFirst()) { // True if the cursor is not empty
    291             int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
    292             String name = cursor.getString(columnIndex);
    293             // Do something with the selected contact's name...
    294         }
    295     }
    296 }
    297 </pre>
    298 
    299 <p>Esse exemplo mostra a lgica bsica que deve ser usada no mtodo {@link
    300 android.app.Activity#onActivityResult onActivityResult()} para manipular
    301 o resultado de uma atividade. A primeira condio verifica se a solicitao foi bem-sucedida &mdash; se for,
    302 o {@code resultCode} ser {@link android.app.Activity#RESULT_OK} &mdash; e se a solicitao
    303 a que esse resultado responder for desconhecida &mdash;, nesse caso, o {@code requestCode} corresponder
    304 ao segundo parmetro com {@link android.app.Activity#startActivityForResult
    305 startActivityForResult()}. A partir da, o cdigo manipula o resultado da atividade com uma consulta
    306 dos dados retornados em uma {@link android.content.Intent} (o parmetro {@code data}).</p>
    307 
    308 <p>Nesse momento, um {@link
    309 android.content.ContentResolver} executa uma consulta em um provedor de contedo, que retorna
    310 um {@link android.database.Cursor} que permite a leitura dos dados consultados. Para obter mais informaes,
    311 consulte o documento <a href="{@docRoot}guide/topics/providers/content-providers.html">Provedores de contedo</a>.</p>
    312 
    313 <p>Para obter mais informaes sobre intenes, consulte o documento
    314 <a href="{@docRoot}guide/components/intents-filters.html">Intenes e filtros de intenes</a>.</p>
    315 
    316 
    317 <h2 id="ShuttingDown">Encerramento de uma atividade</h2>
    318 
    319 <p>Para encerrar uma atividade, chame o mtodo {@link android.app.Activity#finish
    320 finish()}. Tambm  possvel encerrar uma atividade separada iniciada anteriormente chamando
    321 {@link android.app.Activity#finishActivity finishActivity()}.</p>
    322 
    323 <p class="note"><strong>Observao:</strong> na maioria dos casos, no se deve finalizar explicitamente
    324 uma atividade usando esses mtodos. Conforme discutido na seo anterior sobre o ciclo de vida da atividade,
    325 o sistema Android gerencia a vida de uma atividade, portanto no  necessrio finalizar
    326 as atividades. Chamar esses mtodos poderia afetar negativamente a experincia
    327 do usurio esperada e isso s deve ser usado quando realmente no se desejar que o usurio
    328 retorne a essa instncia da atividade.</p>
    329 
    330 
    331 <h2 id="Lifecycle">Gerenciamento do ciclo de vida da atividade</h2>
    332 
    333 <p>O gerenciamento do ciclo de vida das atividades por meio da implementao
    334 de mtodos de retorno de chamada
    335  essencial para desenvolver um aplicativo flexvel. O ciclo de vida de uma atividade  diretamente afetado
    336 por sua associao a outras atividades, sua tarefa e sua pilha de retorno.</p>
    337 
    338 <p>Uma atividade pode existir essencialmente em trs estados:</p>
    339 
    340 <dl>
    341   <dt><i>Retomada</i></dt>
    342     <dd>A atividade est em primeiro plano na tela e tem o foco do usurio (em geral,
    343 chama-se esse estado de "em execuo).</dd>
    344 
    345   <dt><i>Pausada</i></dt>
    346     <dd>A atividade ainda est visvel, mas outra atividade est em primeiro plano e tem o foco. Ou seja,
    347 outra atividade est visvel por cima desta e est parcialmente transparente
    348 ou no cobre inteiramente a tela. Uma atividade pausada est totalmente ativa (o objeto
    349 {@link android.app.Activity} est retido na memria, mantm todas as informaes de estado e do membro e permanece anexado
    350 ao gerenciador de janela), mas pode ser eliminada pelo sistema em situaes de memria extremamente baixa.</dd>
    351 
    352   <dt><i>Interrompida</i></dt>
    353     <dd>A atividade est totalmente suplantada por outra (a atividade passa para
    354 "segundo plano"). Uma atividade interrompida ainda est ativa (o objeto
    355 {@link android.app.Activity} est retido na memria, mantm todas as informaes de estado e do membro, mas <em>no</em> est
    356 anexado ao gerenciador de janelas). No entanto, ela no fica mais visvel para o usurio
    357 e pode ser eliminada pelo sistema se a memria for necessria em outro processo.</dd>
    358 </dl>
    359 
    360 <p>Se uma atividade estiver pausada ou interrompida, o sistema poder descart-la da memria solicitando a
    361 finalizao do processo (chamando seu mtodo {@link android.app.Activity#finish finish()}) ou simplesmente
    362 eliminando-o.  Quando a atividade for reaberta (depois de finalizada ou eliminada), ele dever ser
    363 totalmente recriada.</p>
    364 
    365 
    366 
    367 <h3 id="ImplementingLifecycleCallbacks">Implementao de retornos de chamada do ciclo de vida</h3>
    368 
    369 <p>Quando uma atividade transita entre os diferentes estados descritos acima, ela  notificada
    370 por meio de vrios mtodos de retorno de chamada. Todos os mtodos de retorno de chamada so ganchos
    371 que podem ser substitudos para executar um trabalho adequado quando o estado da atividade muda. O esqueleto de atividade
    372 a seguir contm cada um dos mtodos do ciclo de vida fundamentais:</p>
    373 
    374 
    375 <pre>
    376 public class ExampleActivity extends Activity {
    377     &#64;Override
    378     public void {@link android.app.Activity#onCreate onCreate}(Bundle savedInstanceState) {
    379         super.onCreate(savedInstanceState);
    380         // The activity is being created.
    381     }
    382     &#64;Override
    383     protected void {@link android.app.Activity#onStart onStart()} {
    384         super.onStart();
    385         // The activity is about to become visible.
    386     }
    387     &#64;Override
    388     protected void {@link android.app.Activity#onResume onResume()} {
    389         super.onResume();
    390         // The activity has become visible (it is now "resumed").
    391     }
    392     &#64;Override
    393     protected void {@link android.app.Activity#onPause onPause()} {
    394         super.onPause();
    395         // Another activity is taking focus (this activity is about to be "paused").
    396     }
    397     &#64;Override
    398     protected void {@link android.app.Activity#onStop onStop()} {
    399         super.onStop();
    400         // The activity is no longer visible (it is now "stopped")
    401     }
    402     &#64;Override
    403     protected void {@link android.app.Activity#onDestroy onDestroy()} {
    404         super.onDestroy();
    405         // The activity is about to be destroyed.
    406     }
    407 }
    408 </pre>
    409 
    410 <p class="note"><strong>Observao:</strong> a implementao desses mtodos do ciclo de vida
    411 deve sempre chamar a implementao da superclasse antes de realizar qualquer trabalho, conforme ilustrado no exemplo acima.</p>
    412 
    413 <p>Juntos, esses mtodos definem todo o ciclo de vida da atividade. Ao implement-los,
    414  possvel monitorar trs loops aninhados no ciclo de vida da atividade: </p>
    415 
    416 <ul>
    417 <li><b>Todo o tempo de vida</b> de uma atividade acontece entre a chamada de {@link
    418 android.app.Activity#onCreate onCreate()} e a chamada de {@link
    419 android.app.Activity#onDestroy}. A atividade deve executar configurao
    420 de estado "global" (como definindo layout) em {@link android.app.Activity#onCreate onCreate()}
    421 e liberar todos os recursos restantes em {@link android.app.Activity#onDestroy}. Por exemplo: se a sua atividade
    422 tiver um encadeamento em execuo em segundo plano para baixar dados da rede, ela pode
    423 cri-lo em {@link android.app.Activity#onCreate onCreate()} e, em seguida, interromp-lo em {@link
    424 android.app.Activity#onDestroy}.</li>
    425 
    426 <li><p>O <b>tempo de vida visvel</b> de uma atividade acontece entre a chamada de {@link
    427 android.app.Activity#onStart onStart()} e a chamada de {@link
    428 android.app.Activity#onStop onStop()}. Durante esse tempo, o usurio pode ver a atividade
    429 na tela e interagir com ela. Por exemplo: {@link android.app.Activity#onStop onStop()}  chamado
    430 quando uma nova atividade inicia e esta no fica mais visvel. Entre esses dois mtodos,  possvel
    431 manter os recursos necessrios para exibir a atividade ao usurio. Por exemplo: voc pode registrar
    432 um {@link android.content.BroadcastReceiver} em {@link
    433 android.app.Activity#onStart onStart()} para monitorar as alteraes que afetem a IU e cancelar o registro
    434  em {@link android.app.Activity#onStop onStop()} quando o usurio no puder mais ver
    435 o que voc est exibindo. O sistema pode chamar {@link android.app.Activity#onStart onStart()} e {@link
    436 android.app.Activity#onStop onStop()} vrias vezes durante todo o tempo de vida de uma atividade
    437 enquanto ela alterna entre visvel e oculta ao usurio.</p></li>
    438 
    439 <li><p>O <b>tempo de vida em primeiro plano</b> de uma atividade ocorre entre a chamada de {@link
    440 android.app.Activity#onResume onResume()} e a chamada de {@link android.app.Activity#onPause
    441 onPause()}. Durante esse tempo, a atividade est na frente de todas as outras atividades na tela
    442 e tem o foco de interao do usurio.  Frequentemente, uma atividade pode transitar entre o primeiro e
    443 o segundo plano &mdash; por exemplo, {@link android.app.Activity#onPause onPause()}  chamado quando o dispositivo est em suspenso
    444 ou quando uma caixa de dilogo  exibida. Como esse estado pode transitar frequentemente, o cdigo nesses dois mtodos deve
    445 ser bem leve para evitar transies lentas que faam o usurio esperar.</p></li>
    446 </ul>
    447 
    448 <p>A figura 1 ilustra esses loops e os caminhos que uma atividade pode tomar entre os estados.
    449 Os retngulos representam os mtodos de retorno de chamada que podem ser implementados para executar operaes
    450 quando a atividade transita entre estados. <p>
    451 
    452 <img src="{@docRoot}images/activity_lifecycle.png" alt="" />
    453 <p class="img-caption"><strong>Figura 1.</strong> Ciclo de vida da atividade.</p>
    454 
    455 <p>Os mesmos mtodos de retorno de chamada do ciclo de vida so listados na tabela 1, que descreve cada um deles
    456 em mais detalhes e localiza cada um dentro
    457 do ciclo de vida geral da atividade, inclusive se o sistema puder eliminar a atividade depois
    458 da concluso do mtodo de retorno de chamada.</p>
    459 
    460 <p class="table-caption"><strong>Tabela 1.</strong> Resumo dos mtodos de retorno de chamada
    461 do ciclo de vida da atividade.</p>
    462 
    463 <table border="2" width="85%" frame="hsides" rules="rows">
    464 <colgroup align="left" span="3"></colgroup>
    465 <colgroup align="left"></colgroup>
    466 <colgroup align="center"></colgroup>
    467 <colgroup align="center"></colgroup>
    468 
    469 <thead>
    470 <tr><th colspan="3">Mtodo</th> <th>Descrio</th> <th>Eliminvel depois de?</th> <th>Prximo</th></tr>
    471 </thead>
    472 
    473 <tbody>
    474 <tr>
    475   <td colspan="3" align="left"><code>{@link android.app.Activity#onCreate onCreate()}</code></td>
    476   <td>Chamado quando a atividade  criada pela primeira vez.
    477        quando deve-se fazer toda a configurao esttica normal &mdash;
    478 criar vistas, vincular dados a listas etc.  Esse mtodo recebe
    479 um objeto Bundle (pacote) contendo o estado anterior da atividade, se esse
    480 estado for capturado (consulte <a href="#actstate">Gravao do estado da atividade</a>
    481 mais adiante).
    482       <p>Sempre seguido de {@code onStart()}.</p></td>
    483   <td align="center">No</td>
    484       <td align="center">{@code onStart()}</td>
    485 </tr>
    486 
    487 <tr>
    488    <td rowspan="5" style="border-left: none; border-right: none;">&nbsp;&nbsp;&nbsp;&nbsp;</td>
    489    <td colspan="2" align="left"><code>{@link android.app.Activity#onRestart
    490 onRestart()}</code></td>
    491    <td>Chamado depois que atividade tiver sido interrompida, logo antes de ser
    492 reiniciada.
    493        <p>Sempre seguido de {@code onStart()}.</p></td>
    494    <td align="center">No</td>
    495    <td align="center">{@code onStart()}</td>
    496 </tr>
    497 
    498 <tr>
    499    <td colspan="2" align="left"><code>{@link android.app.Activity#onStart onStart()}</code></td>
    500    <td>Chamado logo antes de a atividade se tornar visvel ao usurio.
    501        <p>Seguido de {@code onResume()} se a atividade
    502 for para segundo plano ou {@code onStop()} se ficar oculta.</p></td>
    503     <td align="center">No</td>
    504     <td align="center">{@code onResume()} <br/>ou<br/> {@code onStop()}</td>
    505 </tr>
    506 
    507 <tr>
    508    <td rowspan="2" style="border-left: none;">&nbsp;&nbsp;&nbsp;&nbsp;</td>
    509    <td align="left"><code>{@link android.app.Activity#onResume onResume()}</code></td>
    510    <td>Chamado logo antes de a atividade iniciar
    511 a interao com o usurio.  Nesse ponto, a atividade estar
    512 no topo da pilha de atividades com a entrada do usurio direcionada a ela.
    513        <p>Sempre seguido de {@code onPause()}.</p></td>
    514    <td align="center">No</td>
    515    <td align="center">{@code onPause()}</td>
    516 </tr>
    517 
    518 <tr>
    519    <td align="left"><code>{@link android.app.Activity#onPause onPause()}</code></td>
    520    <td>Chamado quando o sistema est prestes a retomar
    521 outra atividade.  Esse mtodo normalmente  usado para confirmar alteraes
    522 no salvas a dados persistentes, animaes interrompidas e outras coisas que talvez
    523 estejam consumindo CPU e assim por diante.  Ele sempre deve fazer tudo bem rapidamente porque
    524 a prxima atividade no ser retomada at ela retornar.
    525        <p>Seguido de {@code onResume()} se a atividade
    526 retornar para a frente ou de {@code onStop()} se ficar
    527 invisvel ao usurio.</td>
    528    <td align="center"><strong style="color:#800000">Sim</strong></td>
    529    <td align="center">{@code onResume()} <br/>ou<br/> {@code onStop()}</td>
    530 </tr>
    531 
    532 <tr>
    533    <td colspan="2" align="left"><code>{@link android.app.Activity#onStop onStop()}</code></td>
    534    <td>Chamado quando a atividade no est mais visvel ao usurio.  Isso
    535 pode acontecer porque ela est sendo destruda ou porque outra atividade
    536 (uma existente ou uma nova) foi retomada e est cobrindo-a.
    537        <p>Seguido de {@code onRestart()} se a atividade
    538 estiver voltando a interagir com o usurio
    539 ou {@code onDestroy()} se estiver saindo.</p></td>
    540    <td align="center"><strong style="color:#800000">Sim</strong></td>
    541    <td align="center">{@code onRestart()} <br/>ou<br/> {@code onDestroy()}</td>
    542 </tr>
    543 
    544 <tr>
    545    <td colspan="3" align="left"><code>{@link android.app.Activity#onDestroy
    546 onDestroy()}</code></td>
    547    <td>Chamado antes de a atividade ser destruda.   a ltima chamada
    548 que a atividade receber.  Pode ser chamado porque a atividade
    549 est finalizando (algum chamou <code>{@link android.app.Activity#finish
    550        finish()}</code> nela) ou porque o sistema est destruindo temporariamente essa instncia
    551 da atividade para poupar espao.   possvel distinguir
    552 entre essas duas situaes com o mtodo <code>{@link
    553        android.app.Activity#isFinishing isFinishing()}</code>.</td>
    554    <td align="center"><strong style="color:#800000">Sim</strong></td>
    555    <td align="center"><em>nada</em></td>
    556 </tr>
    557 </tbody>
    558 </table>
    559 
    560 <p>A coluna de nome "Eliminvel depois de?" indica se o sistema pode ou no
    561 eliminar o processo que hospeda a atividade a qualquer momento <em>aps o mtodo retornar</em>
    562 sem executar outra linha de cdigo da atividade.  Estes trs mtodos so marcados como "sim": ({@link
    563 android.app.Activity#onPause
    564 onPause()}, {@link android.app.Activity#onStop onStop()} e {@link android.app.Activity#onDestroy
    565 onDestroy()}). Como {@link android.app.Activity#onPause onPause()}  o primeiro
    566 dos trs, assim que a atividade  criada, {@link android.app.Activity#onPause onPause()} 
    567 o ltimo mtodo que certamente ser chamado antes que o processo <em>possa</em> ser eliminado &mdash;
    568 se o sistema precisar recuperar memria em uma emergncia, {@link
    569 android.app.Activity#onStop onStop()} e {@link android.app.Activity#onDestroy onDestroy()} podero
    570 no ser chamados. Portanto, deve-se usar {@link android.app.Activity#onPause onPause()} para gravar
    571 dados persistentes cruciais (como edies do usurio) no armazenamento. No entanto, deve-se sempre ser seletivo
    572 acerca das informaes que devem ser retidas durante {@link android.app.Activity#onPause onPause()} porque
    573 qualquer procedimento de bloqueio nesse mtodo bloquear a transio para a prxima atividade e retardar
    574 a experincia do usurio.</p>
    575 
    576 <p> Os mtodos marcados como "No" na coluna <b>Eliminveis</b> protegem o processo que hospeda
    577 a atividade. evitando a eliminao dele no momento em que  chamado.  Assim, uma atividade  eliminvel
    578 do momento em que {@link android.app.Activity#onPause onPause()} retorna ao momento em que
    579 {@link android.app.Activity#onResume onResume()}  chamado. Ela no ser eliminvel novamente at que
    580 {@link android.app.Activity#onPause onPause()} seja chamado e retorne novamente. </p>
    581 
    582 <p class="note"><strong>Observao:</strong> uma atividade tecnicamente no "eliminvel, por essa definio
    583 na tabela 1, ainda pode ser eliminada pelo sistema &mdash; mas isso s ocorreria
    584 em circunstncias extremas, quando no houvesse outra opo. A possibilidade de uma atividade ser eliminada
    585  discutida em mais detalhes no documento <a href="{@docRoot}guide/components/processes-and-threads.html">Processos
    586 e encadeamentos</a>.</p>
    587 
    588 
    589 <h3 id="SavingActivityState">Gravao do estado da atividade</h3>
    590 
    591 <p>A introduo a <a href="#Lifecycle">Gerenciamento do ciclo de vida da atividade</a> menciona brevemente
    592 que,
    593 quando uma atividade  pausada ou interrompida, o estado da atividade  retido. Isso acontece porque
    594 o objeto {@link android.app.Activity} continua mantido na memria quando a atividade est pausada
    595 ou interrompida &mdash; todas as informaes sobre seus membros e estado atual ainda esto ativas. Assim, todas as alteraes
    596 feitas pelo usurio dentro da atividade so retidas, de forma que, quando a atividade retornar
    597 ao primeiro plano (quando  "retomada"), essas alteraes ainda estejam l.</p>
    598 
    599 <p>No entanto, quando o sistema destri uma atividade para recuperar memria, o objeto {@link
    600 android.app.Activity}  destrudo, por isso o sistema no pode simplesmente retom-la com seu estado
    601 intacto. Em vez disso, o sistema tem que recriar o objeto {@link android.app.Activity} se o usurio
    602 navegar de volta a ele. Ainda assim, o usurio no estar ciente
    603 de que o sistema destruiu a atividade e recriou-a e, assim, provavelmente
    604 esperar que a atividade esteja exatamente como antes. Nessa situao, para garantir que
    605 as informaes importantes sobre o estado da atividade sejam preservadas, implementa-se um mtodo
    606 adicional de retorno de chamada que permite salvar as informaes sobre o estado da atividade: {@link
    607 android.app.Activity#onSaveInstanceState onSaveInstanceState()}.</p>
    608 
    609 <p>O sistema chama {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
    610 antes de deixar a mensagem vulnervel  destruio. O sistema passa a esse mtodo
    611 um {@link android.os.Bundle} no qual  possvel salvar
    612 informaes de estado acerca da atividade, como pares nome-valor, usando mtodos como {@link
    613 android.os.Bundle#putString putString()} e {@link
    614 android.os.Bundle#putInt putInt()}. Em seguida, se o sistema eliminar o processo
    615 do aplicativo e o usurio voltar  atividade, o sistema recriar a atividade e passar
    616 o {@link android.os.Bundle} a {@link android.app.Activity#onCreate onCreate()} e a {@link
    617 android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}. Usando qualquer um desses mtodos,
    618  possvel extrair o estado salvo de {@link android.os.Bundle} e restaurar
    619 o estado da atividade. Se no houver informaes de estado a restaurar, o {@link
    620 android.os.Bundle} passado ser nulo (que  o caso quando a atividade  criada
    621 pela primeira vez).</p>
    622 
    623 <img src="{@docRoot}images/fundamentals/restore_instance.png" alt="" />
    624 <p class="img-caption"><strong>Figura 2.</strong> As duas formas pelas quais uma atividade retorna ao foco
    625 do usurio com seu estado intacto: ou a atividade  destruda e recriada em seguida  e ela deve restaurar
    626 o estado salvo anteriormente , ou a atividade  interrompida e retomada em seguida  e o estado dela
    627 permanece intacto.</p>
    628 
    629 <p class="note"><strong>Observao:</strong> no h garantia nenhuma de que {@link
    630 android.app.Activity#onSaveInstanceState onSaveInstanceState()} ser chamado antes de a atividade
    631 ser destruda porque h casos em que no ser necessrio salvar o estado
    632 (como quando o usurio sai da atividade usando o boto <em>Voltar</em>) porque o usurio est fechando
    633 explicitamente
    634 a atividade). Se o sistema chamar {@link android.app.Activity#onSaveInstanceState
    635 onSaveInstanceState()}, ele o far antes de {@link
    636 android.app.Activity#onStop onStop()} e possivelmente antes de {@link android.app.Activity#onPause
    637 onPause()}.</p>
    638 
    639 <p>No entanto, mesmo se voc no fizer nada e no implementar {@link
    640 android.app.Activity#onSaveInstanceState onSaveInstanceState()}, parte do estado da atividade
    641 ser restaurada pela implementao padro da classe {@link android.app.Activity} de {@link
    642 android.app.Activity#onSaveInstanceState onSaveInstanceState()}. Especificamente, a implementao
    643 padro chama o mtodo {@link
    644 android.view.View#onSaveInstanceState onSaveInstanceState()} correspondente para cada {@link
    645 android.view.View} no layout, o que permite que cada vista fornea informaes prprias sobre o que
    646 deve ser salvo. Quase todo widget na estrutura do Android implementa esse mtodo
    647 conforme o necessrio, de forma que qualquer alterao visvel na IU seja automaticamente salva e restaurada
    648 ao criar a atividade. Por exemplo, o widget {@link android.widget.EditText} salva qualquer texto
    649 inserido pelo usurio e o widget {@link android.widget.CheckBox} salva independente
    650 de verificao. O nico trabalho necessrio ser fornecer um ID exclusivo (com
    651 o atributo <a href="{@docRoot}guide/topics/resources/layout-resource.html#idvalue">{@code android:id}</a>) para cada widget que for salvar seu estado. Se o widget no salvar nenhum ID, o sistema
    652 no poder salvar seu estado.</p>
    653 
    654 <div class="sidebox-wrapper">
    655 <div class="sidebox">
    656 <p>Para fazer com que uma vista deixe explicitamente de salvar seu estado, defina o atributo
    657 {@link android.R.attr#saveEnabled android:saveEnabled} como {@code "false"} ou chame
    658 o mtodo {@link android.view.View#setSaveEnabled setSaveEnabled()}. Geralmente, no se deve
    659 desativar isso, mas  possvel caso se deseje restaurar o estado da IU da atividade de forma diferente.</p>
    660 </div>
    661 </div>
    662 
    663 <p>Embora a implementao padro de {@link
    664 android.app.Activity#onSaveInstanceState onSaveInstanceState()} salve informaes teis sobre
    665 a IU da atividade, talvez ainda seja necessrio substitu-la para salvar informaes adicionais.
    666 Por exemplo: pode ser necessrio salvar valores de membro alterados durante a vida da atividade (possivelmente
    667 correlacionados a valores restaurados na IU, mas os membros que retm esses valores de IU, por padro,
    668 no so restaurados).</p>
    669 
    670 <p>Como a implementao padro de {@link
    671 android.app.Activity#onSaveInstanceState onSaveInstanceState()} ajuda a salvar o estado da IU,
    672 se o mtodo for substitudo para salvar informaes de estado adicionais, deve-se sempre chamar a implementao
    673 da superclasse de {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
    674 antes de fazer qualquer trabalho. Da mesma forma, deve-se tambm chamar a implementao da superclasse de {@link
    675 android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} se ela for substituda para que
    676 a implementao padro possa restaurar estados da vista.</p>
    677 
    678 <p class="note"><strong>Observao:</strong> Como nem sempre {@link android.app.Activity#onSaveInstanceState
    679 onSaveInstanceState()}  chamado,
    680 deve-se us-lo somente para registrar o estado temporrio da atividade (o estado
    681 da IU) &mdash; nunca se deve us-lo para armazenar dados persistentes.  Em vez disso, deve-se usar {@link
    682 android.app.Activity#onPause onPause()} para armazenar dados persistentes (como dados que devem ser salvos
    683 em um banco de dados) quando o usurio sair da atividade.</p>
    684 
    685 <p>Uma boa forma de testar a capacidade do aplicativo de restaurar seu estado  girar
    686 o dispositivo para alterar a orientao da tela. Quando a orientao de tela muda, o sistema
    687 destri e recria a atividade para aplicar recursos alternativos que podem ser disponibilizados
    688 para a nova configurao de tela. Por esse motivo somente,  muito importante que a atividade
    689 restaure completamente seu estado quando for recriada porque os usurios normalmente giram a tela
    690 ao usar aplicativos.</p>
    691 
    692 
    693 <h3 id="ConfigurationChanges">Manipulao de alteraes de configurao</h3>
    694 
    695 <p>Algumas configuraes do dispositivo podem mudar em tempo de execuo (como A orientao da tela, disponibilidade
    696 do teclado e idioma). Quando ocorre uma alterao, o Android recria a atividade em execuo
    697 (o sistema chama {@link android.app.Activity#onDestroy} e, em seguida, chama {@link
    698 android.app.Activity#onCreate onCreate()} imediatamente). Esse comportamento foi projetado
    699 para ajudar o aplicativo a se adaptar a novas configuraes recarregando-o automaticamente
    700 com recursos alternativos fornecidos pelo programador (como diferentes layouts
    701 para orientaes e tamanhos de telas diferentes).</p>
    702 
    703 <p>Se voc projetar adequadamente a atividade para manipular um reincio devido a uma alterao na orientao da tela
    704 e restaurar o estado da atividade conforme descrito acima, o aplicativo ser mais resiliente a outros
    705 eventos inesperados no ciclo de vida da atividade.</p>
    706 
    707 <p>A melhor forma de manipular um reincio desse tipo
    708  salvar e restaurar o estado da atividade com {@link
    709  android.app.Activity#onSaveInstanceState onSaveInstanceState()} e {@link
    710 android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} (ou com {@link
    711 android.app.Activity#onCreate onCreate()}), conforme abordado na seo anterior.</p>
    712 
    713 <p>Para obter mais informaes sobre alteraes de configurao que podem ocorrer em tempo de execuo e como manipul-las,
    714 leia o guia em <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Tratamento de
    715 alteraes em tempo de execuo</a>.</p>
    716 
    717 
    718 
    719 <h3 id="CoordinatingActivities">Coordenao de atividades</h3>
    720 
    721  <p>Quando uma atividade inicia outra, ambas passam por transies no ciclo de vida. A primeira atividade
    722  pausada e interrompida (embora ela no seja interrompida se ainda estiver visvel em segundo plano) enquanto a outra
    723 atividade  criada. Caso essas atividades compartilhem dados salvos em disco ou em outro lugar,  importante
    724 compreender que a primeira atividade no  totalmente interrompida antes da criao da segunda.
    725 Em vez disso, o processo de iniciar a segunda se sobrepe ao processo de interromper
    726 a primeira.</p>
    727 
    728 <p>A ordem dos retornos de chamada do ciclo de vida  bem definida, especialmente quando as duas atividades esto
    729 no mesmo processo e uma est iniciando a outra. A seguir h a ordem das operaes que ocorrem quando a atividade A
    730 inicia a atividade B: </p>
    731 
    732 <ol>
    733 <li>O mtodo {@link android.app.Activity#onPause onPause()} da atividade A  executado.</li>
    734 
    735 <li>Os mtodos {@link android.app.Activity#onCreate onCreate()}, {@link
    736 android.app.Activity#onStart onStart()} e {@link android.app.Activity#onResume onResume()}
    737 da atividade B so executados em sequncia (a atividade B agora tem o foco do usurio).</li>
    738 
    739 <li>Em seguida, se a atividade A no estiver mais visvel na tela, seu mtodo {@link
    740 android.app.Activity#onStop onStop()}  executado.</li>
    741 </ol>
    742 
    743  <p>Essa sequncia previsvel de retornos de chamada do ciclo de vida permite gerenciar a transio
    744 de informaes de uma atividade para outra. Por exemplo: se voc for gravar em um banco de dados o momento em que
    745 a primeira atividade  interrompida para que a atividade a seguir possa l-lo,  preciso realizar a gravao
    746 no banco de dados durante {@link android.app.Activity#onPause onPause()} e no durante {@link
    747 android.app.Activity#onStop onStop()}.</p>
    748 
    749 <!--
    750 <h2>Beginner's Path</h2>
    751 
    752 <p>For more information about how Android maintains a history of activities and
    753 enables user multitasking, continue with the <b><a
    754 href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back
    755 Stack</a></b> document.</p>
    756 -->
    757