1page.title=Iniciando uma atividade 2page.tags=ciclo de vida de atividade 3helpoutsWidget=true 4 5trainingnavtop=true 6 7@jd:body 8 9 10<div id="tb-wrapper"> 11 <div id="tb"> 12 13 <h2>Esta lição ensina a</h2> 14<ol> 15 <li><a href="#lifecycle-states">Entender o ciclo de vida do retorno de chamada</a></li> 16 <li><a href="#launching-activity">Especificar a atividade da tela de início do aplicativo</a></li> 17 <li><a href="#Create">Criar uma nova instância</a></li> 18 <li><a href="#Destroy">Destruir a atividade</a></li> 19</ol> 20 21 <h2>Leia também</h2> 22 <ul> 23 <li><a href="{@docRoot}guide/components/activities.html">Atividades</a></li> 24 </ul> 25 26<h2>Tente</h2> 27 28<div class="download-box"> 29 <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">Baixar a demonstração</a> 30 <p class="filename">ActivityLifecycle.zip</p> 31</div> 32 33 </div> 34</div> 35 36<p>Diferente de outros paradigmas de programação em que os aplicativos são lançados com um método {@code main()}, o 37sistema Android inicia o código em uma instância {@link android.app.Activity} chamando métodos específicos 38de retorno de chamada que correspondem a determinados estágios do seu 39ciclo de vida. Há uma sequência de métodos de retorno de chamada que iniciam uma atividade e uma sequência de métodos 40de retorno de chamada que interrompem uma atividade.</p> 41 42<p>Essa lição proporciona uma visão geral dos métodos do ciclo de vida mais importantes e mostra como 43lidar com o primeiro retorno de chamada do ciclo de vida que cria uma nova instância de sua atividade.</p> 44 45 46 47<h2 id="lifecycle-states">Entender o ciclo de vida do retorno de chamada</h2> 48 49<p>Durante a vida de uma atividade, o sistema chama um núcleo principal de métodos do ciclo de vida em 50uma sequência parecida com uma pirâmide em degraus. Isto é, cada estágio do 51ciclo de vida da atividade corresponde a um degrau da pirâmide. Conforme o sistema cria uma nova instância de atividade, 52cada método de retorno de chamada leva o estado da atividade um degrau acima. O topo da pirâmide é o 53ponto em que a atividade funciona em primeiro plano e o usuário pode interagir com ela.</p> 54 55<p>Conforme o usuário começa a sair da atividade, o sistema chama outros métodos que a movem 56de volta em direção à base da pirâmide para desfazer a atividade. Em alguns casos, a atividade é movida 57parcialmente em direção à base da pirâmide e aguarda (como quando o usuário muda para outro aplicativo), no 58ponto em que a atividade é movida novamente em direção ao topo (se o usuário retornar à atividade) e 59reinicia de onde o usuário parou.</p> 60 61 62<img src="{@docRoot}images/training/basics/basic-lifecycle.png" /> 63<p class="img-caption"><strong>Figura 1.</strong> Ilustração simplificada do ciclo de vida 64da atividade, expressa como pirâmide em degraus. Isso mostra que, para cada retorno de chamada usado para levar 65uma atividade ao estado de Reiniciado, em direção ao topo, há um método de retorno de chamada 66que leva a atividade um degrau abaixo. A atividade também pode retornar ao estado de retomada do 67estado de Pausado e Interrompido.</p> 68 69 70<p>Dependendo da complexidade de sua atividade, não há necessidade de implementar todos os 71métodos do ciclo de vida. No entanto, é importante compreender cada um e implementar apenas aqueles que 72garantem que seu aplicativo tenha o desempenho esperado pelo usuário. A implementação adequada dos métodos do ciclo de vida da atividade 73garante que seu aplicativo tenha um bom desempenho em vários sentidos, incluindo que:</p> 74<ul> 75 <li>Não apresente falhas se o usuário receber uma chamada telefônica ou mudar para outro aplicativo 76enquanto estiver usando o seu aplicativo.</li> 77 <li>Não consuma recursos importantes do sistema quando o usuário não estiver utilizando 78ativamente o aplicativo.</li> 79 <li>Não perca o progresso do usuário se ele sair do aplicativo e retornar 80mais tarde.</li> 81 <li>Não apresente falhas nem perca o progresso do usuário quando a orientação da tela mudar entre 82paisagem e retrato.</li> 83</ul> 84 85<!-- 86<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback 87methods.</p> 88<table> 89 <tr> 90 <th scope="col">Lifecycle State</th> 91 <th scope="col">Startup Method</th> 92 <th scope="col">Teardown Method</th> 93 </tr> 94 <tr> 95 <td>Created / Destroyed</td> 96 <td>{@link android.app.Activity#onCreate onCreate()}</td> 97 <td>{@link android.app.Activity#onDestroy()}</td> 98 </tr> 99 <tr> 100 <td>Started / Stopped</td> 101 <td>{@link android.app.Activity#onStart()}</td> 102 <td>{@link android.app.Activity#onStop()}</td> 103 </tr> 104 <tr> 105 <td>Resumed / Resumed</td> 106 <td>{@link android.app.Activity#onResume()}</td> 107 <td>{@link android.app.Activity#onPause()}</td> 108 </tr> 109</table> 110--> 111 112<p>Como você aprenderá nas lições seguintes, há várias situações de transições de 113atividades entre estados diferentes, como ilustrado na figura 1. No entanto, apenas três 114desses estados podem ser estáticos. Isto é, a atividade pode existir em um de apenas três estados por 115um período de tempo maior:</p> 116<dl> 117 <dt>Reiniciado</dt> 118 <dd>Neste estado, a atividade está no primeiro plano e o usuário consegue interagir. 119(Também chamado de estado de funcionamento.)</dd> 120 <dt>Pausado</dt> 121 <dd>Neste estado, a atividade está parcialmente obscurecida por outra atividade. A 122outra atividade que está em primeiro plano é semitransparente ou não cobre totalmente a tela. A 123atividade pausada não recebe entrada do usuário e não executa nenhum código. 124 <dt>Interrompido</dt> 125 <dd>Neste estado, a atividade está completamente oculta e não é visível para o usuário. Considera-se 126que está em segundo plano. Enquanto interrompido, a instância da atividade e todas as 127informações de estado, como variáveis de membro, são retidas, mas não é possível executar nenhum código.</dd> 128</dl> 129 130<p>Os outros estados (Criado e Iniciado) são temporários e o sistema rapidamente se move rapidamente de um 131estado a outro chamando o próximo método de retorno de chamada do ciclo de vida. Isto é, depois que o sistema chama 132{@link android.app.Activity#onCreate onCreate()}, ele rapidamente chama {@link 133android.app.Activity#onStart()}, que é seguido por {@link 134android.app.Activity#onResume()}.</p> 135 136<p>Isso é tudo que precisamos dizer sobre o ciclo de vida básico de atividades. Agora você aprenderá sobre alguns dos 137comportamentos específicos do ciclo de vida.</p> 138 139 140 141<h2 id="launching-activity">Especificar a atividade da tela de início do aplicativo</h2> 142 143<p>Quando o usuário seleciona seu aplicativo na tela inicial, o sistema chama o método {@link 144android.app.Activity#onCreate onCreate()} para {@link android.app.Activity} no aplicativo 145que foi declarado como atividade da “inicializador” (ou “principal”). Essa é a atividade que serve como 146ponto de entrada principal da interface do usuário do aplicativo.</p> 147 148<p>É possível definir qual atividade será usada como principal no arquivo manifesto do Android, <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">{@code AndroidManifest.xml}</a>, que está 149na raiz do diretório do seu projeto.</p> 150 151<p>A principal atividade do aplicativo deve ser declarada no manifesto com um <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code 152<intent-filter>}</a> que inclui a ação {@link 153android.content.Intent#ACTION_MAIN MAIN} e categoria 154{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER}. Por exemplo:</p> 155 156<pre> 157<activity android:name=".MainActivity" android:label="@string/app_name"> 158 <intent-filter> 159 <action android:name="android.intent.action.MAIN" /> 160 <category android:name="android.intent.category.LAUNCHER" /> 161 </intent-filter> 162</activity> 163</pre> 164 165<p class="note"><strong>Observação:</strong> ao criar um novo projeto do Android com ferramentas 166SDK Android, os arquivos padrões do projeto incluem uma classe {@link android.app.Activity} que é declarada no 167manifesto com esse filtro.</p> 168 169<p>Se a ação {@link android.content.Intent#ACTION_MAIN MAIN} nem a categoria 170{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} forem declaradas para uma de suas 171atividades, o ícone do aplicativo não aparecerá na lista de aplicativos da tela inicial.</p> 172 173 174 175<h2 id="Create">Criar uma nova instância</h2> 176 177<p>A maioria dos aplicativos tem várias atividades que permitem ao usuário realizar diferentes ações. 178Tanto para a atividade principal criada quando o usuário clica no ícone do aplicativo quanto uma 179atividade diferente que o aplicativo inicia em resposta à ação do usuário, o sistema cria 180cada nova instância do {@link android.app.Activity} chamando o método {@link 181android.app.Activity#onCreate onCreate()}.</p> 182 183<p>Implemente o método {@link android.app.Activity#onCreate onCreate()} para realizar a lógica básica 184de inicialização do aplicativo que deve acontecer apenas uma vez na vida completa da atividade. Por 185exemplo, sua implementação do {@link android.app.Activity#onCreate onCreate()} deve definir a 186interface do usuário e possivelmente instanciar algumas variáveis de escopo de classe.</p> 187 188<p>Por exemplo, o seguinte modelo do método {@link android.app.Activity#onCreate onCreate()} 189 mostra alguns códigos que realizam configurações fundamentais para a atividade, como 190declarar a interface do usuário (definida em arquivo de layout XML), definir variáveis de membro 191e configurar parte da interface do usuário.</p> 192 193<pre> 194TextView mTextView; // Member variable for text view in the layout 195 196@Override 197public void onCreate(Bundle savedInstanceState) { 198 super.onCreate(savedInstanceState); 199 200 // Set the user interface layout for this Activity 201 // The layout file is defined in the project res/layout/main_activity.xml file 202 setContentView(R.layout.main_activity); 203 204 // Initialize member TextView so we can manipulate it later 205 mTextView = (TextView) findViewById(R.id.text_message); 206 207 // Make sure we're running on Honeycomb or higher to use ActionBar APIs 208 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 209 // For the main activity, make sure the app icon in the action bar 210 // does not behave as a button 211 ActionBar actionBar = getActionBar(); 212 actionBar.setHomeButtonEnabled(false); 213 } 214} 215</pre> 216 217<p class="caution"><strong>Cuidado:</strong> utilizar {@link android.os.Build.VERSION#SDK_INT} para 218evitar que sistemas antigos executem novas APIs funciona apenas no Android 2.0 (API Nível 2195) e versões posteriores. Versões mais antigas encontram uma exceção no tempo de execução.</p> 220 221<p>Depois que o {@link android.app.Activity#onCreate onCreate()} termina de executar, o sistema 222chama os métodos {@link android.app.Activity#onStart()} e {@link android.app.Activity#onResume()} 223 em rápida sucessão. A atividade nunca reside nos estados Criado ou Iniciado. Tecnicamente, a 224atividade se torna visível para o usuário quando {@link android.app.Activity#onStart()} é chamado, mas 225{@link android.app.Activity#onResume()} é executado e a atividade permanece no estado Reiniciado 226até que algo diferente ocorra, como o recebimento de uma chamada telefônica, o usuário 227navegar para outra atividade ou a tela do dispositivo desligar.</p> 228 229<p>Nas próximas lições, você verá como outros métodos de inicialização, {@link 230android.app.Activity#onStart()} e {@link android.app.Activity#onResume()}, podem ajudar 231no ciclo de vida da atividade quando utilizado para reiniciar a atividade dos estados Pausado e Interrompido.</p> 232 233<p class="note"><strong>Observação:</strong> o método {@link android.app.Activity#onCreate onCreate()} 234inclui um parâmetro chamado <code>savedInstanceState</code>, que será discutido mais adiante 235na lição <a href="recreating.html">Recriando uma atividade</a>.</p> 236 237 238<img src="{@docRoot}images/training/basics/basic-lifecycle-create.png" /> 239<p class="img-caption"><strong>Figura 2.</strong> Outra ilustração da estrutura do ciclo de vida da 240atividade com ênfase nos três retornos de chamada principais que o sistema chama na sequência quando 241cria uma nova instância da atividade: {@link android.app.Activity#onCreate onCreate()}, {@link 242android.app.Activity#onStart()} e{@link android.app.Activity#onResume()}. Depois que esta sequência de 243retornos de chamada for concluída, a atividade chega ao estado Reiniciado em que os usuários podem interagir com a 244atividade até que mude para outra atividade.</p> 245 246 247 248 249 250 251 252<h2 id="Destroy">Destruir a atividade</h2> 253 254<p>Embora o retorno de chamada do primeiro ciclo de vida da atividade seja {@link android.app.Activity#onCreate 255onCreate()}, o último retorno de chamada será {@link android.app.Activity#onDestroy}. O sistema chama 256este método na atividade como o último 257sinal de que a instância da atividade está sendo completamente removida da memória do sistema.</p> 258 259<p>A maioria dos aplicativos não exige a implementação desse método porque referências de classe locais são destruídas 260com a atividade, que realiza a maior parte da limpeza durante {@link 261android.app.Activity#onPause} e {@link android.app.Activity#onStop}. No entanto, se a 262atividade incluir threads de segundo plano criados durante {@link 263android.app.Activity#onCreate onCreate()} ou outro recurso de longa execução que pode 264vazar memória se não forem fechados adequadamente, você deve finalizá-los durante {@link 265android.app.Activity#onDestroy}.</p> 266 267<pre> 268@Override 269public void onDestroy() { 270 super.onDestroy(); // Always call the superclass 271 272 // Stop method tracing that the activity started during onCreate() 273 android.os.Debug.stopMethodTracing(); 274} 275</pre> 276 277<p class="note"><strong>Observação:</strong> o sistema chama {@link android.app.Activity#onDestroy} 278depois de ter chamado {@link android.app.Activity#onPause} e {@link 279android.app.Activity#onStop} em qualquer situação, exceto uma: quando você chama {@link 280android.app.Activity#finish()} pelo método {@link android.app.Activity#onCreate onCreate()} 281. Em alguns casos, como quando a atividade assume a posição temporária de tomadora de decisões para 282lançar outra atividade, chame {@link android.app.Activity#finish()} pelo {@link 283android.app.Activity#onCreate onCreate()} para destruir a atividade. Nesse caso, o sistema 284chama imediatamente {@link android.app.Activity#onDestroy} sem chamar qualquer outro 285 método do ciclo de vida.</p> 286