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 — quando o sistema a est criando, interrompendo, retomando ou destruindo — 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 — 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 <activity>}</a> 143 como filho do elemento 144 <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>. Por exemplo:</p> 145 146 <pre> 147 <manifest ... > 148 <application ... > 149 <activity android:name=".ExampleActivity" /> 150 ... 151 </application ... > 152 ... 153 </manifest > 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 — 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 <activity>}</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 <activity>}</a> tambm pode especificar vrios filtros de intenes — usando o elemento <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code 172 <intent-filter>}</a> — 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 <activity android:name=".ExampleActivity" android:icon="@drawable/app_icon"> 182 <intent-filter> 183 <action android:name="android.intent.action.MAIN" /> 184 <category android:name="android.intent.category.LAUNCHER" /> 185 </intent-filter> 186 </activity> 187 </pre> 188 189 <p>O elemento <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code 190 <action>}</a> especifica que este o principal ponto de entrada do aplicativo. O elemento <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code 191 <category>}</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 <intent-filter>}</a> que contenha um elemento 204 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code 205 <action>}</a> e, opcionalmente, um elemento <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code 206 <category>}</a> e/ou um elemento <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code 207 <data>}</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 — 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 @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 && 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 — se for, 302 o {@code resultCode} ser {@link android.app.Activity#RESULT_OK} — e se a solicitao 303 a que esse resultado responder for desconhecida —, 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 @Override 378 public void {@link android.app.Activity#onCreate onCreate}(Bundle savedInstanceState) { 379 super.onCreate(savedInstanceState); 380 // The activity is being created. 381 } 382 @Override 383 protected void {@link android.app.Activity#onStart onStart()} { 384 super.onStart(); 385 // The activity is about to become visible. 386 } 387 @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 @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 @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 @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 — 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 — 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;"> </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;"> </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 — 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 — 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 — 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) — 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