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&lt;activity android:name=".MainActivity" android:label="&#64;string/app_name">
158    &lt;intent-filter>
159        &lt;action android:name="android.intent.action.MAIN" />
160        &lt;category android:name="android.intent.category.LAUNCHER" />
161    &lt;/intent-filter>
162&lt;/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&#64;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&#64;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