1 page.title=Iniciando uma atividade 2 page.tags=ciclo de vida de atividade 3 helpoutsWidget=true 4 5 trainingnavtop=true 6 7 @jd:body 8 9 10 <div id="tb-wrapper"> 11 <div id="tb"> 12 13 <h2>Esta lio 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 incio do aplicativo</a></li> 17 <li><a href="#Create">Criar uma nova instncia</a></li> 18 <li><a href="#Destroy">Destruir a atividade</a></li> 19 </ol> 20 21 <h2>Leia tambm</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 demonstrao</a> 30 <p class="filename">ActivityLifecycle.zip</p> 31 </div> 32 33 </div> 34 </div> 35 36 <p>Diferente de outros paradigmas de programao em que os aplicativos so lanados com um mtodo {@code main()}, o 37 sistema Android inicia o cdigo em uma instncia {@link android.app.Activity} chamando mtodos especficos 38 de retorno de chamada que correspondem a determinados estgios do seu 39 ciclo de vida. H uma sequncia de mtodos de retorno de chamada que iniciam uma atividade e uma sequncia de mtodos 40 de retorno de chamada que interrompem uma atividade.</p> 41 42 <p>Essa lio proporciona uma viso geral dos mtodos do ciclo de vida mais importantes e mostra como 43 lidar com o primeiro retorno de chamada do ciclo de vida que cria uma nova instncia 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 ncleo principal de mtodos do ciclo de vida em 50 uma sequncia parecida com uma pirmide em degraus. Isto , cada estgio do 51 ciclo de vida da atividade corresponde a um degrau da pirmide. Conforme o sistema cria uma nova instncia de atividade, 52 cada mtodo de retorno de chamada leva o estado da atividade um degrau acima. O topo da pirmide o 53 ponto em que a atividade funciona em primeiro plano e o usurio pode interagir com ela.</p> 54 55 <p>Conforme o usurio comea a sair da atividade, o sistema chama outros mtodos que a movem 56 de volta em direo base da pirmide para desfazer a atividade. Em alguns casos, a atividade movida 57 parcialmente em direo base da pirmide e aguarda (como quando o usurio muda para outro aplicativo), no 58 ponto em que a atividade movida novamente em direo ao topo (se o usurio retornar atividade) e 59 reinicia de onde o usurio parou.</p> 60 61 62 <img src="{@docRoot}images/training/basics/basic-lifecycle.png" /> 63 <p class="img-caption"><strong>Figura 1.</strong> Ilustrao simplificada do ciclo de vida 64 da atividade, expressa como pirmide em degraus. Isso mostra que, para cada retorno de chamada usado para levar 65 uma atividade ao estado de Reiniciado, em direo ao topo, h um mtodo de retorno de chamada 66 que leva a atividade um degrau abaixo. A atividade tambm pode retornar ao estado de retomada do 67 estado de Pausado e Interrompido.</p> 68 69 70 <p>Dependendo da complexidade de sua atividade, no h necessidade de implementar todos os 71 mtodos do ciclo de vida. No entanto, importante compreender cada um e implementar apenas aqueles que 72 garantem que seu aplicativo tenha o desempenho esperado pelo usurio. A implementao adequada dos mtodos do ciclo de vida da atividade 73 garante que seu aplicativo tenha um bom desempenho em vrios sentidos, incluindo que:</p> 74 <ul> 75 <li>No apresente falhas se o usurio receber uma chamada telefnica ou mudar para outro aplicativo 76 enquanto estiver usando o seu aplicativo.</li> 77 <li>No consuma recursos importantes do sistema quando o usurio no estiver utilizando 78 ativamente o aplicativo.</li> 79 <li>No perca o progresso do usurio se ele sair do aplicativo e retornar 80 mais tarde.</li> 81 <li>No apresente falhas nem perca o progresso do usurio quando a orientao da tela mudar entre 82 paisagem e retrato.</li> 83 </ul> 84 85 <!-- 86 <p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback 87 methods.</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 lies seguintes, h vrias situaes de transies de 113 atividades entre estados diferentes, como ilustrado na figura 1. No entanto, apenas trs 114 desses estados podem ser estticos. Isto , a atividade pode existir em um de apenas trs estados por 115 um perodo de tempo maior:</p> 116 <dl> 117 <dt>Reiniciado</dt> 118 <dd>Neste estado, a atividade est no primeiro plano e o usurio consegue interagir. 119 (Tambm chamado de estado de funcionamento.)</dd> 120 <dt>Pausado</dt> 121 <dd>Neste estado, a atividade est parcialmente obscurecida por outra atividade. A 122 outra atividade que est em primeiro plano semitransparente ou no cobre totalmente a tela. A 123 atividade pausada no recebe entrada do usurio e no executa nenhum cdigo. 124 <dt>Interrompido</dt> 125 <dd>Neste estado, a atividade est completamente oculta e no visvel para o usurio. Considera-se 126 que est em segundo plano. Enquanto interrompido, a instncia da atividade e todas as 127 informaes de estado, como variveis de membro, so retidas, mas no possvel executar nenhum cdigo.</dd> 128 </dl> 129 130 <p>Os outros estados (Criado e Iniciado) so temporrios e o sistema rapidamente se move rapidamente de um 131 estado a outro chamando o prximo mtodo 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 133 android.app.Activity#onStart()}, que seguido por {@link 134 android.app.Activity#onResume()}.</p> 135 136 <p>Isso tudo que precisamos dizer sobre o ciclo de vida bsico de atividades. Agora voc aprender sobre alguns dos 137 comportamentos especficos do ciclo de vida.</p> 138 139 140 141 <h2 id="launching-activity">Especificar a atividade da tela de incio do aplicativo</h2> 142 143 <p>Quando o usurio seleciona seu aplicativo na tela inicial, o sistema chama o mtodo {@link 144 android.app.Activity#onCreate onCreate()} para {@link android.app.Activity} no aplicativo 145 que foi declarado como atividade da inicializador (ou principal). Essa a atividade que serve como 146 ponto de entrada principal da interface do usurio do aplicativo.</p> 147 148 <p> possvel 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 149 na raiz do diretrio 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 ao {@link 153 android.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>Observao:</strong> ao criar um novo projeto do Android com ferramentas 166 SDK Android, os arquivos padres do projeto incluem uma classe {@link android.app.Activity} que declarada no 167 manifesto com esse filtro.</p> 168 169 <p>Se a ao {@link android.content.Intent#ACTION_MAIN MAIN} nem a categoria 170 {@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} forem declaradas para uma de suas 171 atividades, o cone do aplicativo no aparecer na lista de aplicativos da tela inicial.</p> 172 173 174 175 <h2 id="Create">Criar uma nova instncia</h2> 176 177 <p>A maioria dos aplicativos tem vrias atividades que permitem ao usurio realizar diferentes aes. 178 Tanto para a atividade principal criada quando o usurio clica no cone do aplicativo quanto uma 179 atividade diferente que o aplicativo inicia em resposta ao do usurio, o sistema cria 180 cada nova instncia do {@link android.app.Activity} chamando o mtodo {@link 181 android.app.Activity#onCreate onCreate()}.</p> 182 183 <p>Implemente o mtodo {@link android.app.Activity#onCreate onCreate()} para realizar a lgica bsica 184 de inicializao do aplicativo que deve acontecer apenas uma vez na vida completa da atividade. Por 185 exemplo, sua implementao do {@link android.app.Activity#onCreate onCreate()} deve definir a 186 interface do usurio e possivelmente instanciar algumas variveis de escopo de classe.</p> 187 188 <p>Por exemplo, o seguinte modelo do mtodo {@link android.app.Activity#onCreate onCreate()} 189 mostra alguns cdigos que realizam configuraes fundamentais para a atividade, como 190 declarar a interface do usurio (definida em arquivo de layout XML), definir variveis de membro 191 e configurar parte da interface do usurio.</p> 192 193 <pre> 194 TextView mTextView; // Member variable for text view in the layout 195 196 @Override 197 public 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 218 evitar que sistemas antigos executem novas APIs funciona apenas no Android 2.0 (API Nvel 219 5) e verses posteriores. Verses mais antigas encontram uma exceo no tempo de execuo.</p> 220 221 <p>Depois que o {@link android.app.Activity#onCreate onCreate()} termina de executar, o sistema 222 chama os mtodos {@link android.app.Activity#onStart()} e {@link android.app.Activity#onResume()} 223 em rpida sucesso. A atividade nunca reside nos estados Criado ou Iniciado. Tecnicamente, a 224 atividade se torna visvel para o usurio quando {@link android.app.Activity#onStart()} chamado, mas 225 {@link android.app.Activity#onResume()} executado e a atividade permanece no estado Reiniciado 226 at que algo diferente ocorra, como o recebimento de uma chamada telefnica, o usurio 227 navegar para outra atividade ou a tela do dispositivo desligar.</p> 228 229 <p>Nas prximas lies, voc ver como outros mtodos de inicializao, {@link 230 android.app.Activity#onStart()} e {@link android.app.Activity#onResume()}, podem ajudar 231 no ciclo de vida da atividade quando utilizado para reiniciar a atividade dos estados Pausado e Interrompido.</p> 232 233 <p class="note"><strong>Observao:</strong> o mtodo {@link android.app.Activity#onCreate onCreate()} 234 inclui um parmetro chamado <code>savedInstanceState</code>, que ser discutido mais adiante 235 na lio <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 ilustrao da estrutura do ciclo de vida da 240 atividade com nfase nos trs retornos de chamada principais que o sistema chama na sequncia quando 241 cria uma nova instncia da atividade: {@link android.app.Activity#onCreate onCreate()}, {@link 242 android.app.Activity#onStart()} e{@link android.app.Activity#onResume()}. Depois que esta sequncia de 243 retornos de chamada for concluda, a atividade chega ao estado Reiniciado em que os usurios podem interagir com a 244 atividade 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 255 onCreate()}, o ltimo retorno de chamada ser {@link android.app.Activity#onDestroy}. O sistema chama 256 este mtodo na atividade como o ltimo 257 sinal de que a instncia da atividade est sendo completamente removida da memria do sistema.</p> 258 259 <p>A maioria dos aplicativos no exige a implementao desse mtodo porque referncias de classe locais so destrudas 260 com a atividade, que realiza a maior parte da limpeza durante {@link 261 android.app.Activity#onPause} e {@link android.app.Activity#onStop}. No entanto, se a 262 atividade incluir threads de segundo plano criados durante {@link 263 android.app.Activity#onCreate onCreate()} ou outro recurso de longa execuo que pode 264 vazar memria se no forem fechados adequadamente, voc deve finaliz-los durante {@link 265 android.app.Activity#onDestroy}.</p> 266 267 <pre> 268 @Override 269 public 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>Observao:</strong> o sistema chama {@link android.app.Activity#onDestroy} 278 depois de ter chamado {@link android.app.Activity#onPause} e {@link 279 android.app.Activity#onStop} em qualquer situao, exceto uma: quando voc chama {@link 280 android.app.Activity#finish()} pelo mtodo {@link android.app.Activity#onCreate onCreate()} 281 . Em alguns casos, como quando a atividade assume a posio temporria de tomadora de decises para 282 lanar outra atividade, chame {@link android.app.Activity#finish()} pelo {@link 283 android.app.Activity#onCreate onCreate()} para destruir a atividade. Nesse caso, o sistema 284 chama imediatamente {@link android.app.Activity#onDestroy} sem chamar qualquer outro 285 mtodo do ciclo de vida.</p> 286