Activity的生命周期
之前的文章已经介绍过Activity了,想要学好Activity,掌握Activity的生命周期是至关重要的。下面是我自己做的一张图,基本涵盖了生命周期需要注意的知识点,如下:
注释1:Activity在前台的运行的过程。
注释2:自onStart()调用开始直到相应的onStop()调用结束,在此期间,用户可以在屏幕上看到Activity。
注释3:完成的生命周期,从onCreate()初始化到onDestory()销毁结束。
接下来通过代码和运行结果进行演示
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("运行到MainActivity的onCreate方法");
startActivity(intent);
}
@Override
protected void onStart() {
super.onStart();
System.out.println("运行了MainActivity方法的onstart");
}
@Override
protected void onResume() {
super.onResume();
System.out.println("运行了MainActivity方法的onResume");
}
@Override
protected void onPause() {
super.onPause();
System.out.println("运行了MainActivity方法的onPause");
}
@Override
protected void onStop() {
super.onStop();
System.out.println("运行了MainActivity方法的onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("运行了MainActivity方法的onDestroy");
}
}
运行结果(这里主要带大家看打开一个界面和关闭界面是Activity的生命周期是怎么样的,不要只在意界面的设计):
接下来看当打开第二个界面,这两个Activity的生命周期是怎样的,这边第二个界面也需要写出生命周期的六个方法,这边就不在重复写了,只是给大家展示一下第一个界面到第二个界面的按钮点击事件的代码,如下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("运行到MainActivity的onCreate方法");
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//此处是点击事件,该事件启动一个新的界面
Intent intent = new Intent();
//显示的启动Activity,,使用的是Component属性指定了将要启动的组件的名称
intent.setComponent(new ComponentName(MainActivity.this, SecActivity.class));
startActivity(intent);
}
运行结果(我设置的按钮点击事件是点击“显示按钮”跳转到第二个界面):
Activity的启动模式
- Standard:这是一个默认的启动模式,在不进行显示指定的情况下,所有活动都会自动使用这种启动模式,该模式下生成新的Activity,就将该Activity放置栈顶。每次启动新的活动都会创建一个新的实例,不管这个活动在栈中是否存在。
- singleTop:启动活动时如果发现该活动已经在栈顶,就直接使用它,不在创建新的实例,如果要启动的活动不在栈顶,就会创建一个新的实例。
- singleTask:如果栈中没有创建新的实例,就将该活动放置栈顶,如果栈中已经存在该活动的实例,那就清除该活动之上的所有活动,使其变为栈顶。
- singleInstance:独占一个堆栈,该应用中只有该Activity一个实例。