android系统四大组件之Activity

Activity的生命周期


我们通过编写测试程序来分析其生命周期。

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        Log.d("MainActivity","onCreate()被调用");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.d("MainActivity","onStart()被调用");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("MainActivity","onResume()被调用");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("MainActivity","onPause()被调用");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("MainActivity","onStop()被调用");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("MainActivity","onDestroy()被调用");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("MainActivity","onRestart()被调用");
    }
}

当我们一开始启动app时,会依次调用OnCreate()->OnStart()->OnResume()

当我们将app移动到后台时,会依次调用OnPause()->OnStop()

当我们再次将app从后台点击到前台屏幕上是,会依次调用OnRestart()->OnStart()->OnResume()

当我们将app退出时,会依次调用OnPause()->OnStop()->OnDestroy()

activity四种启动模式

activity 栈(task栈)

每个app启动时都会创建一个默认的task栈用来存放和管理activity,一个app可以有多个task栈。
这个task栈是先进后出的栈,默认模式下的activity每启动一次就会创建一个实例并入栈(Standard模式)。

四种启动模式

Standard模式

默认的模式每启动一个activity都会创建一个实例,并把启动的activity入栈。
例如再次启动activity C,则会再次创建一个实例并将新启动的activity C入栈,同时会调用其OnCreate()->OnStart()->OnReSume()

SingleTop模式

如果启动的activity已经位于栈顶则直接复用栈顶的activity(不会在调用OnCreate->OnStart->OnResume, 但是会在复用activity时调用OnNewIntent),如果不在栈顶则新创建一个实例activity。

第一种情况

第二种情况

SingTask模式

当启动的activity在栈中,将对应的activity上方的activity都弹出并销毁,复用此activity(调用OnNewIntant)。如果不在栈中就重新创建并实例化压栈。

SingleInstance模式

app会为拥有此模式的activity单独建立一个task栈,并且所有的app中只允许存在一个此activity。
当一个app启动activity时,只要其存在其他任意app的task栈中,其都会为此activity创建新的栈并将其入栈(调用OnNewInstant)。不存在就创建并实例化入栈。

activity之间相互调用

通过Intent类实现antivity之间的相互调用

Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);

上述代码将当前activity类与另一个activity类绑定,并通过调用startActivity来启动第二个activity(SecondActivity)

posted @ 2022-04-11 23:21  怎么可以吃突突  阅读(186)  评论(0编辑  收藏  举报