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)