Home | History | Annotate | Download | only in activity-lifecycle
      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 &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>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 &#64;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 &#64;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