page.title=Iniciando uma atividade page.tags=ciclo de vida de atividade helpoutsWidget=true trainingnavtop=true @jd:body
ActivityLifecycle.zip
Diferente de outros paradigmas de programação em que os aplicativos são lançados com um método {@code main()}, o sistema Android inicia o código em uma instância {@link android.app.Activity} chamando métodos específicos de retorno de chamada que correspondem a determinados estágios do seu ciclo de vida. Há uma sequência de métodos de retorno de chamada que iniciam uma atividade e uma sequência de métodos de retorno de chamada que interrompem uma atividade.
Essa lição proporciona uma visão geral dos métodos do ciclo de vida mais importantes e mostra como lidar com o primeiro retorno de chamada do ciclo de vida que cria uma nova instância de sua atividade.
Durante a vida de uma atividade, o sistema chama um núcleo principal de métodos do ciclo de vida em uma sequência parecida com uma pirâmide em degraus. Isto é, cada estágio do ciclo de vida da atividade corresponde a um degrau da pirâmide. Conforme o sistema cria uma nova instância de atividade, cada método de retorno de chamada leva o estado da atividade um degrau acima. O topo da pirâmide é o ponto em que a atividade funciona em primeiro plano e o usuário pode interagir com ela.
Conforme o usuário começa a sair da atividade, o sistema chama outros métodos que a movem de volta em direção à base da pirâmide para desfazer a atividade. Em alguns casos, a atividade é movida parcialmente em direção à base da pirâmide e aguarda (como quando o usuário muda para outro aplicativo), no ponto em que a atividade é movida novamente em direção ao topo (se o usuário retornar à atividade) e reinicia de onde o usuário parou.
Dependendo da complexidade de sua atividade, não há necessidade de implementar todos os métodos do ciclo de vida. No entanto, é importante compreender cada um e implementar apenas aqueles que garantem que seu aplicativo tenha o desempenho esperado pelo usuário. A implementação adequada dos métodos do ciclo de vida da atividade garante que seu aplicativo tenha um bom desempenho em vários sentidos, incluindo que:
Como você aprenderá nas lições seguintes, há várias situações de transições de atividades entre estados diferentes, como ilustrado na figura 1. No entanto, apenas três desses estados podem ser estáticos. Isto é, a atividade pode existir em um de apenas três estados por um período de tempo maior:
Os outros estados (Criado e Iniciado) são temporários e o sistema rapidamente se move rapidamente de um estado a outro chamando o próximo método de retorno de chamada do ciclo de vida. Isto é, depois que o sistema chama {@link android.app.Activity#onCreate onCreate()}, ele rapidamente chama {@link android.app.Activity#onStart()}, que é seguido por {@link android.app.Activity#onResume()}.
Isso é tudo que precisamos dizer sobre o ciclo de vida básico de atividades. Agora você aprenderá sobre alguns dos comportamentos específicos do ciclo de vida.
Quando o usuário seleciona seu aplicativo na tela inicial, o sistema chama o método {@link android.app.Activity#onCreate onCreate()} para {@link android.app.Activity} no aplicativo que foi declarado como atividade da “inicializador” (ou “principal”). Essa é a atividade que serve como ponto de entrada principal da interface do usuário do aplicativo.
É possível definir qual atividade será usada como principal no arquivo manifesto do Android, {@code AndroidManifest.xml}, que está na raiz do diretório do seu projeto.
A principal atividade do aplicativo deve ser declarada no manifesto com um {@code
<activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
Observação: ao criar um novo projeto do Android com ferramentas SDK Android, os arquivos padrões do projeto incluem uma classe {@link android.app.Activity} que é declarada no manifesto com esse filtro.
Se a ação {@link android.content.Intent#ACTION_MAIN MAIN} nem a categoria {@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} forem declaradas para uma de suas atividades, o ícone do aplicativo não aparecerá na lista de aplicativos da tela inicial.
A maioria dos aplicativos tem várias atividades que permitem ao usuário realizar diferentes ações. Tanto para a atividade principal criada quando o usuário clica no ícone do aplicativo quanto uma atividade diferente que o aplicativo inicia em resposta à ação do usuário, o sistema cria cada nova instância do {@link android.app.Activity} chamando o método {@link android.app.Activity#onCreate onCreate()}.
Implemente o método {@link android.app.Activity#onCreate onCreate()} para realizar a lógica básica de inicialização do aplicativo que deve acontecer apenas uma vez na vida completa da atividade. Por exemplo, sua implementação do {@link android.app.Activity#onCreate onCreate()} deve definir a interface do usuário e possivelmente instanciar algumas variáveis de escopo de classe.
Por exemplo, o seguinte modelo do método {@link android.app.Activity#onCreate onCreate()} mostra alguns códigos que realizam configurações fundamentais para a atividade, como declarar a interface do usuário (definida em arquivo de layout XML), definir variáveis de membro e configurar parte da interface do usuário.
TextView mTextView; // Member variable for text view in the layout @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the user interface layout for this Activity // The layout file is defined in the project res/layout/main_activity.xml file setContentView(R.layout.main_activity); // Initialize member TextView so we can manipulate it later mTextView = (TextView) findViewById(R.id.text_message); // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // For the main activity, make sure the app icon in the action bar // does not behave as a button ActionBar actionBar = getActionBar(); actionBar.setHomeButtonEnabled(false); } }
Cuidado: utilizar {@link android.os.Build.VERSION#SDK_INT} para evitar que sistemas antigos executem novas APIs funciona apenas no Android 2.0 (API Nível 5) e versões posteriores. Versões mais antigas encontram uma exceção no tempo de execução.
Depois que o {@link android.app.Activity#onCreate onCreate()} termina de executar, o sistema chama os métodos {@link android.app.Activity#onStart()} e {@link android.app.Activity#onResume()} em rápida sucessão. A atividade nunca reside nos estados Criado ou Iniciado. Tecnicamente, a atividade se torna visível para o usuário quando {@link android.app.Activity#onStart()} é chamado, mas {@link android.app.Activity#onResume()} é executado e a atividade permanece no estado Reiniciado até que algo diferente ocorra, como o recebimento de uma chamada telefônica, o usuário navegar para outra atividade ou a tela do dispositivo desligar.
Nas próximas lições, você verá como outros métodos de inicialização, {@link android.app.Activity#onStart()} e {@link android.app.Activity#onResume()}, podem ajudar no ciclo de vida da atividade quando utilizado para reiniciar a atividade dos estados Pausado e Interrompido.
Observação: o método {@link android.app.Activity#onCreate onCreate()}
inclui um parâmetro chamado savedInstanceState
, que será discutido mais adiante
na lição Recriando uma atividade.
Embora o retorno de chamada do primeiro ciclo de vida da atividade seja {@link android.app.Activity#onCreate onCreate()}, o último retorno de chamada será {@link android.app.Activity#onDestroy}. O sistema chama este método na atividade como o último sinal de que a instância da atividade está sendo completamente removida da memória do sistema.
A maioria dos aplicativos não exige a implementação desse método porque referências de classe locais são destruídas com a atividade, que realiza a maior parte da limpeza durante {@link android.app.Activity#onPause} e {@link android.app.Activity#onStop}. No entanto, se a atividade incluir threads de segundo plano criados durante {@link android.app.Activity#onCreate onCreate()} ou outro recurso de longa execução que pode vazar memória se não forem fechados adequadamente, você deve finalizá-los durante {@link android.app.Activity#onDestroy}.
@Override public void onDestroy() { super.onDestroy(); // Always call the superclass // Stop method tracing that the activity started during onCreate() android.os.Debug.stopMethodTracing(); }
Observação: o sistema chama {@link android.app.Activity#onDestroy} depois de ter chamado {@link android.app.Activity#onPause} e {@link android.app.Activity#onStop} em qualquer situação, exceto uma: quando você chama {@link android.app.Activity#finish()} pelo método {@link android.app.Activity#onCreate onCreate()} . Em alguns casos, como quando a atividade assume a posição temporária de tomadora de decisões para lançar outra atividade, chame {@link android.app.Activity#finish()} pelo {@link android.app.Activity#onCreate onCreate()} para destruir a atividade. Nesse caso, o sistema chama imediatamente {@link android.app.Activity#onDestroy} sem chamar qualquer outro método do ciclo de vida.