Estudo aprofundado do ciclo de vida da atividade

prefácio

Entre os quatro principais componentes do Android, a posição da Atividade também é muito importante. Compreender o processo do ciclo de vida da Atividade é, sem dúvida, muito útil para o desenvolvimento do Android. Então, vamos aprender mais sobre o ciclo de vida do Android hoje. Bar!

Antes de aprender o ciclo de vida de Actvity, vamos primeiro falar sobre a compreensão do autor sobre Activity. Quando o autor entrou em contato com o desenvolvimento do Android pela primeira vez, fiquei bastante confuso sobre o que é Activity, e muitos livros introdutórios não introduzem em detalhes o que é Activity. A maioria deles simplesmente disse que Activity é um dos quatro principais componentes do Android, e então não há O que há de errado com isso, vamos começar a apresentar a função de retorno de chamada de seu ciclo de vida...
Talvez você que está lendo este artigo agora possa pensar: Atividade não é uma atividade, todo o conteúdo que costumamos ver na tela inteira de um telefone Android? Por exemplo, a tela do celular na foto abaixo?

O autor acha que esse é um entendimento tendencioso de Activity. O que você vê na tela de um telefone celular não é uma Activity, mas uma subclasse View herdada de DecorView de FrameLayout, e Activity é usada apenas como uma portadora para transportar essas Views. O autor pensa que a Atividade pode ser considerada como uma operadora, e não uma visão vista na tela do celular.

Hierarquia de atividades


Como tirei essa foto principalmente para ilustrar melhor que a Activity pode ser considerada uma operadora, ao invés das visualizações (TitleView e ContentView) vistas na tela do celular, então sou mais específico sobre a implementação do código-fonte, porque a habilidade do autor está temporariamente limitado, não vou me aprofundar nisso por enquanto aqui:);

Fluxograma do ciclo de vida da atividade

activity_lifecycle

A atividade no sistema Android é gerenciada pela pilha de atividades (pilha de atividades) (o elemento de gerenciamento de pilha é caracterizado por primeiro a entrar, último a sair), quando uma nova atividade é iniciada, a nova atividade será enviada para dentro da pilha de atividades , passa a ser o elemento superior da pilha de atividades, e esta Activity começa a se preparar para interagir com o usuário, ou seja, torna-se a Activity ativa (deve-se observar que a Activity atual que interage com o usuário sempre manterá o topo posição da pilha, até que a atividade atual que interage com o usuário seja encerrada, a atividade atrás dela retornará ao topo da pilha novamente e se tornará a atividade ativa).

Uma nova atividade é inserida na pilha de tarefas ou uma atividade que está atualmente interagindo com o usuário é retirada da pilha de tarefas. No processo de envio ou remoção da pilha, a função de retorno de chamada correspondente no fluxograma do ciclo de vida da atividade acima será provocado.

1.0 Estado representado por cada função de callback na Activity

  • onCreate()É chamado de volta quando a atividade é criada pela primeira vez.Nessa função de retorno de chamada, é usado principalmente para definir a visualização do layout a ser exibida, vincular dados à visualização do layout e inicializar variáveis;
    • onRestrart()Quando a Activity estiver completamente invisível, mas a Activity não tiver sido destruída, quando a Activity retornar ao topo da pilha (quando estiver completamente invisível, a Activity não está no topo da pilha), ela será chamada de volta, e então onStart() será chamado de volta;
    • onStart()A Activity está toda visível para o usuário, mas ainda não adquiriu o foco, ou seja, o usuário é chamado de volta quando não consegue realizar operações nela, mas o processo de callback é muito curto para o usuário, e o usuário não consegue perceber isso.;
      • onResume()Ele é chamado de volta antes que a atividade atual receba o foco, ou seja, após o retorno de chamada, o usuário pode realizar operações nela, como clicar na caixa de entrada para executar uma série de operações, como entrada. todos visíveis ao usuário;
      • onPause()É chamada de volta quando o conteúdo anterior é apenas parcialmente visível para o usuário (nota: a função não será chamada de volta quando uma caixa de diálogo aparecer na interface ou a caixa de entrada aparecer depois de clicar na caixa de entrada, embora também seja parcialmente visível para o usuário neste momento), por exemplo, há uma caixa de diálogo Quando a Atividade estilo caixa aparecer, esta função será chamada de volta;
    • onStop()Quando a visualização na Activity estiver completamente invisível, esta função será chamada de volta;
  • onDestroy()Quando a Activity sair, execute o método finish(), ou quando a memória do sistema estiver apertada, a Activity será encerrada e esta função será chamada de volta;

A função callback acima é a função callback correspondente quando o usuário abre uma Activity, fecha uma Activity e reabre uma Activity.

2.0 Veja o ciclo de vida da Activity através do modo Dubug

O código a seguir é o código-fonte usado pelo autor ao executar o Dubug:

public class MainActivity extends AppCompatActivity {
    
    

    private static final String TAG = "测试Activity的生命周期";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e(TAG, "onCreate: ");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG, "onStart: ");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG, "onResume: ");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause: ");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop: ");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart: ");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy: ");
    }


}
2.1 Adicione uma atividade ao topo da pilha pela primeira vez:

202017-10-04

2.2 O estado da atividade quando a tecla de menu é pressionada:

202017-10-04

2.3 Quando uma atividade de conversação está sendo executada no topo da pilha de tarefas:

2017-08

Este modo Dubug é principalmente para teste. Quando a atividade exibe uma caixa de entrada, um diálogo do tipo fragmento ou um diálogo do tipo não fragmento, a mudança no ciclo de vida da atividade pode ser vista no log do console. Os três acima Isso fará com que o ciclo de vida da Activity mude, e quando o autor clicar no terceiro botão (este botão monitora uma Activity que apenas exibe imagens e formulários de diálogo), o console imprime a função de callback onPause(), que está na Activity Quando está parcialmente visível, ou assim: quando uma Activity grande é coberta por outra Activity pequena, a Activity grande ainda está parcialmente visível para o usuário, e a função onPause() será chamada de volta neste momento; quando a pequena
Activity A Activity estiver oculta. Nesse momento, a Activity grande retornará ao topo da pilha. Antes de retornar ao topo da pilha, a função onResume() será chamada de volta para se preparar para interagir com o usuário de novo;

2.4 Feche a Activity, ou seja, remova a Activity do topo da pilha:

2000-39

3.0 Mudanças no ciclo de vida da Atividade ao alternar entre telas horizontais e verticais

3.1 Mudanças no ciclo de vida da Atividade ao mudar de retrato para paisagem

2000-47


3.2 Mudanças no ciclo de vida da Atividade quando a tela é alternada de paisagem para retrato

2000-48


Como pode ser visto no registro de depuração da alternância entre telas horizontais e verticais acima, ao alternar entre telas horizontais e verticais, a atividade chamará de volta a função onDestroy() e, em seguida, chamará de volta a função onCreat() novamente. No entanto, às vezes não permitimos que os aplicativos alternem entre as telas horizontal e vertical. Neste momento, ocorre a chamada de retorno da função onDestroy() e, em seguida, a função onCreat() é chamada de volta. Neste momento, se você não quiser que a atividade chame a função onCreat() novamente, há duas soluções:

  • Configurar diretamente as propriedades relacionadas no AndroidManifest.xml não permite alternar entre telas horizontais e verticais,
    principalmente para configurar android:screenOrientation="portrait"esta propriedade em uma Activity que não permite alternar entre telas horizontais e verticais, portraitou seja, somente telas verticais são permitidas, não horizontais; e landscapevice-versa.

O código no nó do aplicativo é o seguinte: (como na Nota 1 abaixo)

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:screenOrientation="portrait"> <!--1-->
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
  • Configure atributos relevantes em AndroidManifest.xml, declare diretamente que o ciclo de vida da Activity não será alterado,
    principalmente configure este atributo em seu próprio AndroidManifest.xml android:configChanges="orientation|keyboardHidden|screenSize".

O código no nó do aplicativo é o seguinte: (como na Nota 2 abaixo)

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"> <!--2-->
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

resumo

Desta vez, a análise do processo de ciclo de vida da Activity está apenas no nível de sua interface API. Para a análise do ciclo de vida da Activity, o autor acredita que, à medida que a mudança da Activity, a relação entre a alternância entre as Activities e suas posições na pilha da Activity são apreendidas, as mudanças no ciclo de vida do Activity A atividade será bem analisada.


Download do código-fonte ActivityTest

Acho que você gosta

Origin blog.csdn.net/HongHua_bai/article/details/78159113
Recomendado
Clasificación