Activity 生命周期浅谈

本文详细探讨了Android Activity的生命周期,包括流程图、管理生命周期和实例运行验证。从`onResume()`到`onPause()`是Activity处于可见并可交互的状态。在`onPause()`到`onStop()`期间,Activity虽然不可见但仍被系统保留。`onStop()`到`onDestroy()`则表示Activity完全不可见,可能因内存不足而被销毁。文章通过实际操作验证了在不同场景下Activity状态的变化过程。
摘要由CSDN通过智能技术生成
  • 流程图
  • 管理生命周期
  • 实例运行, 验证流程

流程图

先附上一张官方提供的 Activity 流程生命周期图

管理生命周期

Activity 基本以三种状态存在
  • 继续
    当前 Activity 处于可见状态, 并且能够响应用户的焦点事件。 在 onResume() ~ onPause() 之间运行
  • 暂停
    当前 Activity 处于可见状态, 但是无法响应用户的焦点事件。 例如,Activity 上覆盖了 AlertDialog, 有新的透明 Activity 处于 继续 状态,但是该 Activity 任然可见。此时的 Activity 仍然由系统保存着所有状态, 优先级较高, 只有内存严重不足时才会杀掉它。 (想想一年前一直在讲的QQ实现进程保活…)
    在 onPause() ~ onStop() 之间
  • 停止
    意味着,当前 Activity 已经完全处于不可见状态, 已经压入 Activity 栈中。优先级较低, 内存不足时, 被系统杀死概率较大
    在onStop() ~ onDestroy() 之间
函数说明
onCreate()首次创建 Activity 时被调用, 可进行系列初始化操作, 视图, 线程等。
onRestart()当 Activity 从停止状态重新恢复到继续状态前触发回调
onStart()在 Activity 即将对用户可见时调用
onResume()在 Activity 对用户可见时调用
onPause()Activity 即将对用户不可见时进行回调, 可以在改函数中, 停止动画显示, 以及其他的一些界面上消耗CPU的事情
onStop()Activity 即将处于暂停状态时的回调, 若处于该状态的 Activity 重新可见时, 则会调用上诉的 onRestart()
onDestroy()Activity 即将销毁时的回调

实例运行, 验证流程

新建 ActivityA.class ,  ActivityB.class 
相同实现, onCreate(), onRestart(), onStart(), onResume(), onPause(), onStop(), onDestroy()
[ActivityB.class 与下面的代码相同, 打印的log改成了 ActivityB 而已]

public class ActivityA extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_a_lay);

        findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ActivityA.this, ActivityB.class);
                startActivity(intent);
            }
        });

        Log.e("zxc", "AndroidActivity, ActivityA.class, onCreate()");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e("zxc", "AndroidActivity, ActivityA.class, onRestart()");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e("zxc", "AndroidActivity, ActivityA.class, onStart()");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e("zxc", "AndroidActivity, ActivityA.class, onResume()");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e("zxc", "AndroidActivity, ActivityA.class, onPause()");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e("zxc", "AndroidActivity, ActivityA.class, onStop()");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e("zxc", "AndroidActivity, ActivityA.class, onDestroy()");
    }
}

当打开一个A时
AndroidActivity, ActivityA.class, onCreate()
AndroidActivity, ActivityA.class, onStart()
AndroidActivity, ActivityA.class, onResume()

这时打开一个B时

AndroidActivity, ActivityA.class, onPause()
AndroidActivity, ActivityB.class, onCreate()
AndroidActivity, ActivityB.class, onStart()
AndroidActivity, ActivityB.class, onResume()
AndroidActivity, ActivityA.class, onStop()

这时退出B

AndroidActivity, ActivityB.class, onPause()
AndroidActivity, ActivityA.class, onRestart()
AndroidActivity, ActivityA.class, onStart()
AndroidActivity, ActivityA.class, onResume()
AndroidActivity, ActivityB.class, onStop()
AndroidActivity, ActivityB.class, onDestroy()

这时退出A

AndroidActivity, ActivityA.class, onPause()
AndroidActivity, ActivityA.class, onStop()
AndroidActivity, ActivityA.class, onDestroy()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值