Home | History | Annotate | Download | only in activity-lifecycle
      1 page.title=Recriando uma atividade
      2 page.tags=ciclo de vida da atividade
      3 helpoutsWidget=true
      4 
      5 trainingnavtop=true
      6 
      7 @jd:body
      8 
      9 <div id="tb-wrapper">
     10   <div id="tb">
     11     
     12     <h2>Esta lio ensina a</h2>
     13     <ol>
     14       <li><a href="#SaveState">Salvar o estado da atividade</a></li>
     15       <li><a href="#RestoreState">Restaurar o estado da atividade</a></li>
     16     </ol>
     17     
     18     <h2>Leia tambm</h2>
     19     <ul>
     20       <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">Compatibilidade
     21  com diferentes telas</a></li>
     22       <li><a href="{@docRoot}guide/topics/resources/runtime-changes.html">Tratar alteraes no tempo de execuo</a></li>
     23       <li><a href="{@docRoot}guide/components/activities.html">Atividades</a>
     24       </li>
     25     </ul>
     26 
     27   </div>
     28 </div>
     29 
     30 <p>Estas so algumas possibilidade onde a atividade  destruda devido ao comportamento normal do aplicativo, como
     31 quando o usurio pressiona o boto <em>Voltar</em> ou sua atividade sinaliza sua prpria destruio
     32 chamando {@link android.app.Activity#finish()}. O sistema tambm pode destruir a atividade se
     33 for interrompida e no tiver sido utilizada por um longo perodo de tempo ou a atividade do primeiro plano exigir mais
     34 recursos, ento, o sistema dever fechar processos de segundo plano para recuperar memria.</p>
     35 
     36 <p>Quando a atividade  destruda porque o usurio pressiona <em>Voltar</em> ou a atividade se
     37 encerra, o conceito do sistema de que a instncia {@link android.app.Activity} se perde
     38 porque o comportamento indica que a atividade j no  necessria. No entanto, se o sistema destruir
     39 a atividade devido a limitaes do sistema (em vez do comportamento normal do aplicativo), embora a instncia real
     40 {@link android.app.Activity} tenha se perdido, o sistema lembra que ela existiu de forma que se
     41 o usurio navegar de volta, o sistema criar uma nova instncia da atividade usando um conjunto
     42 de dados salvos que descrevem o estado da atividade quando foi destruda. Os dados salvos
     43 utilizados pelo sistema para restaurar o estado anterior  chamado de estado da instncia e  uma coleo
     44 de pares de valores-chave armazenados no objeto {@link android.os.Bundle}.</p>
     45 
     46 <p class="caution"><strong>Cuidado:</strong> a atividade  destruda e recriada cada vez
     47 que o usurio girar a tela. Quando a tela altera a orientao, o sistema destri e recria
     48 a atividade de primeiro plano porque a configurao da tela mudou e a atividade talvez precise
     49 carregar recursos alternativos (como o layout).</p>
     50 
     51 <p>Por padro, o sistema usa o estado da instncia {@link android.os.Bundle} para salvar informaes
     52 sobre cada objeto {@link android.view.View} em seu layout de atividade (como o valor do texto informado
     53 em um objeto {@link android.widget.EditText}). Assim, se a instncia da atividade for destruda e
     54 recriada, o estado do layout  restaurado em seu estado anterior sem
     55 que haja necessidade de cdigos. No entanto, sua
     56 atividade pode conter mais informaes de estado do que se deseja restaurar, como varveis de membro que
     57 rastreiam o progresso do usurio na atividade.</p>
     58 
     59 <p class="note"><strong>Observao:</strong> para que o sistema Android restaure o estado das
     60 visualizaes em sua atividade, <strong>cada visualizao precisa ter uma ID exclusiva</strong>, fornecido pelo atributo 
     61 <a href="{@docRoot}reference/android/view/View.html#attr_android:id">{@code
     62 android:id}</a>.</p>
     63 
     64 <p>Para salvar dados adicionais sobre o estado da atividade, substitua
     65 o mtodo de retorno de chamada {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}.
     66 O sistema chama este mtodo quando o usurio sai da atividade
     67 e transmite o objeto{@link android.os.Bundle}, que ser salvo
     68 caso a atividade seja destruda inesperadamente. Se
     69 o sistema precisar recriar a instncia da atividade posteriormente, transmitir o mesmo objeto {@link
     70 android.os.Bundle} para ambos os mtodos {@link android.app.Activity#onRestoreInstanceState
     71 onRestoreInstanceState()} e {@link android.app.Activity#onCreate onCreate()}
     72 .</p>
     73 
     74 <img src="{@docRoot}images/training/basics/basic-lifecycle-savestate.png" />
     75 <p class="img-caption"><strong>Figura 2.</strong> Conforme o sistema comea a interromper a atividade, ele
     76 chama {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}(1) para que voc possa especificar
     77 outros dados de estado que gostaria de salvar caso a instncia {@link android.app.Activity} precise ser
     78 recriada.
     79 Se a atividade for destruda e a mesma instncia precisar ser recriada, o sistema transmite os dados do
     80 estado definidos em (1) para ambos os mtodos {@link android.app.Activity#onCreate onCreate()}
     81 (2) e {@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}
     82 (3).</p>
     83 
     84 
     85 
     86 <h2 id="SaveState">Salvar o estado da atividade</h2>
     87 
     88 <p>Conforme a atividade  interrompida, o sistema chama {@link android.app.Activity#onSaveInstanceState
     89 onSaveInstanceState()} para que a atividade possa salvar informaes de estado com uma coleo de pares de
     90 valor-chave. A implementao padro deste mtodo salva informaes sobre o estado da hierarquia de exibies
     91 da atividade, como o texto em um widget {@link android.widget.EditText} ou a posio de rolagem
     92 de um {@link android.widget.ListView}.</p>
     93 
     94 <p>Para salvar informaes de estado adicionais para a atividade,
     95 implemente {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} e adicione
     96 pares de valor-chave ao objeto {@link android.os.Bundle}. Por exemplo:</p>
     97 
     98 <pre>
     99 static final String STATE_SCORE = "playerScore";
    100 static final String STATE_LEVEL = "playerLevel";
    101 ...
    102 
    103 &#64;Override
    104 public void onSaveInstanceState(Bundle savedInstanceState) {
    105     // Save the user's current game state
    106     savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
    107     savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
    108     
    109     // Always call the superclass so it can save the view hierarchy state
    110     super.onSaveInstanceState(savedInstanceState);
    111 }
    112 </pre>
    113 
    114 <p class="caution"><strong>Cuidado:</strong> sempre chame a implementao de superclasse de {@link
    115 android.app.Activity#onSaveInstanceState onSaveInstanceState()} para que a implementao padro
    116 possa salvar o estado da hierarquia de exibies.</p>
    117 
    118 
    119 
    120 <h2 id="RestoreState">Restaurar o estado da atividade</h2>
    121 
    122 <p>Quando a atividade  recriada depois de ter sido destruda,  possvel recuperar o estado
    123 salvo do {@link android.os.Bundle} que o sistema
    124 transmitiu a atividade. Ambos os mtodos de retorno de chamada {@link android.app.Activity#onCreate onCreate()} e {@link
    125 android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} recebem
    126 o mesmo {@link android.os.Bundle} que contm informaes do estado da instncia.</p>
    127 
    128 <p>Como o mtodo {@link android.app.Activity#onCreate onCreate()}  chamado se o
    129 sistema estiver criando uma nova instncia da atividade ou recriando uma anterior, verifique
    130 se o {@link android.os.Bundle} do estado  null antes de tentar realizar a leitura. Se for null,
    131 o sistema estar criando uma nova instncia da atividade em vez de restaurar uma anterior
    132 que tenha sido destruda.</p>
    133 
    134 <p>Por exemplo, esta  uma forma de restaurar alguns dados de estado no {@link android.app.Activity#onCreate
    135 onCreate()}:</p>
    136 
    137 <pre>
    138 &#64;Override
    139 protected void onCreate(Bundle savedInstanceState) {
    140     super.onCreate(savedInstanceState); // Always call the superclass first
    141    
    142     // Check whether we're recreating a previously destroyed instance
    143     if (savedInstanceState != null) {
    144         // Restore value of members from saved state
    145         mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
    146         mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
    147     } else {
    148         // Probably initialize members with default values for a new instance
    149     }
    150     ...
    151 }
    152 </pre>
    153 
    154 <p>Em vez de restaurar o estado durante {@link android.app.Activity#onCreate onCreate()}, voc
    155 pode implementar {@link
    156 android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}, que o sistema chama
    157 depois do mtodo {@link android.app.Activity#onStart()}. O sistema chama {@link
    158 android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} se houver um estado
    159 salvo para ser restaurado. Portanto, no  necessrio verificar se {@link android.os.Bundle}  null:</p>
    160         
    161 <pre>
    162 public void onRestoreInstanceState(Bundle savedInstanceState) {
    163     // Always call the superclass so it can restore the view hierarchy
    164     super.onRestoreInstanceState(savedInstanceState);
    165    
    166     // Restore state members from saved instance
    167     mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
    168     mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
    169 }
    170 </pre>
    171 
    172 <p class="caution"><strong>Cuidado:</strong> sempre chame a implementao de superclasse de {@link
    173 android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} para que a implementao padro
    174 possa restaurar o estado da hierarquia de exibies.</p>
    175 
    176 <p>Para saber mais sobre recriao de atividades devido a
    177 um evento de reinicializao no tempo de execuo (como quando a tela gira), consulte <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Tratar alteraes no tempo de execuo</a>.</p>
    178 
    179