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 @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 @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