diff options
Diffstat (limited to 'docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/recreating.jd')
-rw-r--r-- | docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/recreating.jd | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/recreating.jd b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/recreating.jd new file mode 100644 index 0000000..7cb122f --- /dev/null +++ b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/recreating.jd @@ -0,0 +1,178 @@ +page.title=Recriando uma atividade +page.tags=ciclo de vida da atividade +helpoutsWidget=true + +trainingnavtop=true + +@jd:body + +<div id="tb-wrapper"> + <div id="tb"> + + <h2>Esta lição ensina a</h2> + <ol> + <li><a href="#SaveState">Salvar o estado da atividade</a></li> + <li><a href="#RestoreState">Restaurar o estado da atividade</a></li> + </ol> + + <h2>Leia também</h2> + <ul> + <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">Compatibilidade + com diferentes telas</a></li> + <li><a href="{@docRoot}guide/topics/resources/runtime-changes.html">Tratar alterações no tempo de execução</a></li> + <li><a href="{@docRoot}guide/components/activities.html">Atividades</a> + </li> + </ul> + + </div> +</div> + +<p>Estas são algumas possibilidade onde a atividade é destruída devido ao comportamento normal do aplicativo, como +quando o usuário pressiona o botão <em>Voltar</em> ou sua atividade sinaliza sua própria destruição +chamando {@link android.app.Activity#finish()}. O sistema também pode destruir a atividade se +for interrompida e não tiver sido utilizada por um longo período de tempo ou a atividade do primeiro plano exigir mais +recursos, então, o sistema deverá fechar processos de segundo plano para recuperar memória.</p> + +<p>Quando a atividade é destruída porque o usuário pressiona <em>Voltar</em> ou a atividade se +encerra, o conceito do sistema de que a instância {@link android.app.Activity} se perde +porque o comportamento indica que a atividade já não é necessária. No entanto, se o sistema destruir +a atividade devido a limitações do sistema (em vez do comportamento normal do aplicativo), embora a instância real +{@link android.app.Activity} tenha se perdido, o sistema lembra que ela existiu de forma que se +o usuário navegar de volta, o sistema criará uma nova instância da atividade usando um conjunto +de dados salvos que descrevem o estado da atividade quando foi destruída. Os dados salvos +utilizados pelo sistema para restaurar o estado anterior é chamado de “estado da instância” e é uma coleção +de pares de valores-chave armazenados no objeto {@link android.os.Bundle}.</p> + +<p class="caution"><strong>Cuidado:</strong> a atividade é destruída e recriada cada vez +que o usuário girar a tela. Quando a tela altera a orientação, o sistema destrói e recria +a atividade de primeiro plano porque a configuração da tela mudou e a atividade talvez precise +carregar recursos alternativos (como o layout).</p> + +<p>Por padrão, o sistema usa o estado da instância {@link android.os.Bundle} para salvar informações +sobre cada objeto {@link android.view.View} em seu layout de atividade (como o valor do texto informado +em um objeto {@link android.widget.EditText}). Assim, se a instância da atividade for destruída e +recriada, o estado do layout é restaurado em seu estado anterior sem +que haja necessidade de códigos. No entanto, sua +atividade pode conter mais informações de estado do que se deseja restaurar, como varáveis de membro que +rastreiam o progresso do usuário na atividade.</p> + +<p class="note"><strong>Observação:</strong> para que o sistema Android restaure o estado das +visualizações em sua atividade, <strong>cada visualização precisa ter uma ID exclusiva</strong>, fornecido pelo atributo +<a href="{@docRoot}reference/android/view/View.html#attr_android:id">{@code +android:id}</a>.</p> + +<p>Para salvar dados adicionais sobre o estado da atividade, substitua +o método de retorno de chamada {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}. +O sistema chama este método quando o usuário sai da atividade +e transmite o objeto{@link android.os.Bundle}, que será salvo +caso a atividade seja destruída inesperadamente. Se +o sistema precisar recriar a instância da atividade posteriormente, transmitirá o mesmo objeto {@link +android.os.Bundle} para ambos os métodos {@link android.app.Activity#onRestoreInstanceState +onRestoreInstanceState()} e {@link android.app.Activity#onCreate onCreate()} +.</p> + +<img src="{@docRoot}images/training/basics/basic-lifecycle-savestate.png" /> +<p class="img-caption"><strong>Figura 2.</strong> Conforme o sistema começa a interromper a atividade, ele +chama {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}(1) para que você possa especificar +outros dados de estado que gostaria de salvar caso a instância {@link android.app.Activity} precise ser +recriada. +Se a atividade for destruída e a mesma instância precisar ser recriada, o sistema transmite os dados do +estado definidos em (1) para ambos os métodos {@link android.app.Activity#onCreate onCreate()} +(2) e {@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} +(3).</p> + + + +<h2 id="SaveState">Salvar o estado da atividade</h2> + +<p>Conforme a atividade é interrompida, o sistema chama {@link android.app.Activity#onSaveInstanceState +onSaveInstanceState()} para que a atividade possa salvar informações de estado com uma coleção de pares de +valor-chave. A implementação padrão deste método salva informações sobre o estado da hierarquia de exibições +da atividade, como o texto em um widget {@link android.widget.EditText} ou a posição de rolagem +de um {@link android.widget.ListView}.</p> + +<p>Para salvar informações de estado adicionais para a atividade, +implemente {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} e adicione +pares de valor-chave ao objeto {@link android.os.Bundle}. Por exemplo:</p> + +<pre> +static final String STATE_SCORE = "playerScore"; +static final String STATE_LEVEL = "playerLevel"; +... + +@Override +public void onSaveInstanceState(Bundle savedInstanceState) { + // Save the user's current game state + savedInstanceState.putInt(STATE_SCORE, mCurrentScore); + savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); + + // Always call the superclass so it can save the view hierarchy state + super.onSaveInstanceState(savedInstanceState); +} +</pre> + +<p class="caution"><strong>Cuidado:</strong> sempre chame a implementação de superclasse de {@link +android.app.Activity#onSaveInstanceState onSaveInstanceState()} para que a implementação padrão +possa salvar o estado da hierarquia de exibições.</p> + + + +<h2 id="RestoreState">Restaurar o estado da atividade</h2> + +<p>Quando a atividade é recriada depois de ter sido destruída, é possível recuperar o estado +salvo do {@link android.os.Bundle} que o sistema +transmitiu a atividade. Ambos os métodos de retorno de chamada {@link android.app.Activity#onCreate onCreate()} e {@link +android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} recebem +o mesmo {@link android.os.Bundle} que contém informações do estado da instância.</p> + +<p>Como o método {@link android.app.Activity#onCreate onCreate()} é chamado se o +sistema estiver criando uma nova instância da atividade ou recriando uma anterior, verifique +se o {@link android.os.Bundle} do estado é null antes de tentar realizar a leitura. Se for null, +o sistema estará criando uma nova instância da atividade em vez de restaurar uma anterior +que tenha sido destruída.</p> + +<p>Por exemplo, esta é uma forma de restaurar alguns dados de estado no {@link android.app.Activity#onCreate +onCreate()}:</p> + +<pre> +@Override +protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); // Always call the superclass first + + // Check whether we're recreating a previously destroyed instance + if (savedInstanceState != null) { + // Restore value of members from saved state + mCurrentScore = savedInstanceState.getInt(STATE_SCORE); + mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); + } else { + // Probably initialize members with default values for a new instance + } + ... +} +</pre> + +<p>Em vez de restaurar o estado durante {@link android.app.Activity#onCreate onCreate()}, você +pode implementar {@link +android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}, que o sistema chama +depois do método {@link android.app.Activity#onStart()}. O sistema chama {@link +android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} se houver um estado +salvo para ser restaurado. Portanto, não é necessário verificar se {@link android.os.Bundle} é null:</p> + +<pre> +public void onRestoreInstanceState(Bundle savedInstanceState) { + // Always call the superclass so it can restore the view hierarchy + super.onRestoreInstanceState(savedInstanceState); + + // Restore state members from saved instance + mCurrentScore = savedInstanceState.getInt(STATE_SCORE); + mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); +} +</pre> + +<p class="caution"><strong>Cuidado:</strong> sempre chame a implementação de superclasse de {@link +android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} para que a implementação padrão +possa restaurar o estado da hierarquia de exibições.</p> + +<p>Para saber mais sobre recriação de atividades devido a +um evento de reinicialização no tempo de execução (como quando a tela gira), consulte <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Tratar alterações no tempo de execução</a>.</p> + |