Android冒险之旅-6-Activity的生命周期

活动的生命周期

  活动是我们在进行Android开发过程中接触最多也必须接触的组件,掌握活动的生命周期对任何Android开发者来说都非常重要。

1. 返回栈

  Android 是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈(Back Stack).在默认情况下,每当我们启动了一个新的活动,它会在返回栈中入栈,并处于栈顶的位置。而每当我们按下 Back 键或调用 finish()方法去销毁一个活动时,处于栈顶的活动会出栈,这时前一个入栈的活动就会重新处于栈顶的位置。系统总是会显示处于栈顶的活动给用户。

2.活动状态

  • 运行状态: 当一个活动位于返回栈的栈顶时,这时活动就处于运行状态
  • 暂停状态: 当一个活动不再处于栈顶位置,但仍然可见时,这时活动就进入了暂停状态
  • 停止状态:当一个活动不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态,当其他地方需要内存时,处于停止状态的活动有可能会被系统回收
  • 销毁状态:当一个活动从返回栈中移除后就变成了销毁状态,系统最倾向于回收处于这种状态的活动,从而保证手机的内存充足

3. 经典生命周期流程图

在这里插入图片描述

4. 生命周期方法介绍

  • onCreate():在首次创建 Activity 时调用。一般在这个方法中初始化Activity,比如:加载布局、绑定事件等。
  • onStart():在 Activity 不可见变为可见时调用。
  • onResume():在 Activity 即将开始与用户进行交互之前调用。 此时,Activity 处于 Activity 堆栈的顶层。
  • onPause():在系统即将启动或者继续另一个 Activity 时调用。 可以在这个方法中释放掉占用CPU的资源并保存关键数据,但这个方法执行速度要快,不然会影响到新的栈顶活动的使用。
  • onStop():在 Activity 对用户不再可见时调用。如果 Activity 被销毁,或另一个 Activity将其覆盖,就会调用此方法。
  • onDestroy():在 Activity 被销毁前调用。 销毁之后活动将变为销毁状态。
  • onRestart():在Activity被停止后再次启动时调用,而后会调用onStart方法。

5. 演示

5.1 重写7个生命周期方法

public class LifeCycleActivity extends AppCompatActivity {
    private static final String TAG = "LifeCycleActivity";
    @BindView(R.id.btn1)
    Button btn1;
    @BindView(R.id.btn2)
    Button btn2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        setContentView(R.layout.activity_lifecycle);
        ButterKnife.bind(this);
    }

    @OnClick({R.id.btn1, R.id.btn2})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn1:
                //启动一个完全覆盖当前活动的活动
                startActivity(new Intent(this,CommonActivity.class));
                break;
            case R.id.btn2:
                //启动一个对话框样式的活动,并不能完全覆盖当前活动
                startActivity(new Intent(this,DialogActivity.class));
                break;
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(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");
    }
}

5.2 当活动第一次启动

08-25 18:11:05.185 5963-5963/qiyuan.lin.helloandroid D/LifeCycleActivity: onCreate
08-25 18:11:05.413 5963-5963/qiyuan.lin.helloandroid D/LifeCycleActivity: onStart
08-25 18:11:05.413 5963-5963/qiyuan.lin.helloandroid D/LifeCycleActivity: onResume

5.2 当启动另一个活动完全覆盖当前活动时

08-25 18:13:32.747 5963-5963/qiyuan.lin.helloandroid D/LifeCycleActivity: onPause
08-25 18:13:33.056 5963-5963/qiyuan.lin.helloandroid D/LifeCycleActivity: onStop

5.3 当前活动被覆盖后重新启用时

08-25 18:14:37.925 5963-5963/qiyuan.lin.helloandroid D/LifeCycleActivity: onRestart
08-25 18:14:37.927 5963-5963/qiyuan.lin.helloandroid D/LifeCycleActivity: onStart
08-25 18:14:37.927 5963-5963/qiyuan.lin.helloandroid D/LifeCycleActivity: onResume

5.4 当启动另一个活动但是没有被完全覆盖时

08-25 18:15:21.644 5963-5963/qiyuan.lin.helloandroid D/LifeCycleActivity: onPause

5.4 当没有被完全覆盖然后重新启用时

08-25 18:15:37.744 5963-5963/qiyuan.lin.helloandroid D/LifeCycleActivity: onResume

kee

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值