android学习笔记----Activity生命周期

概述

Activity生命周期分为六个核心回调方法:onCreate()、onStart()、onResume()、onPause()、onStop() 和 onDestroy()。 Activity 进入新状态时,系统会触发调用其中每个回调方法。
Activity启动流程以及用户操作(切换到其他app或者点击Home按键)的核心回调流程图(来自google文档):
在这里插入图片描述

onCreate

代码中必须实现的回调方法,当Activity首次被创建时触发,Activity在创建后会进入“已创建”状态。在 onCreate() 方法中,需要加入基本的应用启动代码,onCreate内的代码在 Activity 的整个生命周期中只会执行一次。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);//指定XML布局文件
    Log.d(LOG_TAG,"onCreate");
}

将已定义好的 XML文件作为参数传递给setContentView(),还可以在Activity代码中新建自定义的View对象,并将创建好的View添加到ViewGroup,然后将ViewGroup作为参数传递给setContentView()。
onCreate() 方法完成执行后,Activity进入“已开始”状态,随后会相继调用 onStart() 和 onResume() 方法。

onStart

当 Activity 进入“已开始”状态时,系统会调用此回调。onStart() 调用使得 Activity 对用户可见,可以通过此方法执行初始化界面的代码。
onStart() 方法会非常快速地完成,与“已创建”状态一样,Activity 不会一直处于“已开始”状态。一旦此回调结束,Activity 便会进入“已恢复”状态,系统将调用 onResume() 方法。

@Override
protected void onStart() {
    super.onStart();
    Log.d(LOG_TAG,"onStart");
}

onResume

Activity在进入“已恢复”状态时来到前台,然后系统调用 onResume() 方法。“已恢复”状态是与用户互动的状态。应用会一直保持这种状态,直到某些事件(比如接到来电、用户被引导启动到另一个 Activity,或设备屏幕关闭,等等)发生,使得应用失去焦点。
同样,当Activity 进入“已恢复”状态时,与 Activity 生命周期相关联的所有生命周期感知型组件都将收到 ON_RESUME 事件。

@Override
protected void onResume() {
    super.onResume();
    Log.d(LOG_TAG,"onResume");
}

当发生中断事件时,Activity 进入“已暂停”状态,系统调用 onPause() 回调。如果Activity 从“已暂停”状态返回“已恢复”状态,系统将再次调用 onResume() 方法。

onPause

此方法为用户将要离开 Activity 的第一个标志,并且表示Activity不再位于前台(包括多窗口模式时Activity仍然可见),使用 onPause() 方法暂停或调整Activity 处于“已暂停”状态时不应继续或有节制地继续的操作,以及我们希望很快恢复的操作。
当 Activity 进入已暂停状态时,与 Activity 生命周期相关联的所有生命周期感知型组件都将收到 ON_PAUSE 事件。

@Override
protected void onPause() {
    super.onPause();
    //可以释放资源或者传感器、暂停不需要的用户操作以节省电量
    Log.d(LOG_TAG,"onPause");
}

onPause() 执行非常简单,因此不应该使用 onPause() 来保存应用或用户数据、进行网络调用或执行数据库事务。因为在该方法完成之前,可能无法完成上述操作。

onStop

Activity 不再对用户可见,说明其已进入“已停止”状态,因此系统将调用 onStop() 回调。例如,当新启动的Activity覆盖整个屏幕时,可能会发生这种情况。
当 Activity 进入已停止状态时,与 Activity 生命周期相关联的所有生命周期感知型组件都将收到 ON_STOP 事件。

@Override
protected void onStop() {
    super.onStop();
    Log.d(LOG_TAG,"onStop");
}

在 onStop() 方法中,应释放或调整在应用对用户不可见时的无用资源。例如,可以暂停动画效果,或从精确位置更新切换到粗略位置更新。使用 onStop() 而非 onPause() 可确保与界面相关的工作继续进行,即使在多窗口模式下查看 Activity 也能如此。
进入“已停止”状态后,Activity 要么返回与用户互动,要么结束运行并消失。如果 Activity 返回,系统将调用 onRestart()。如果 Activity 结束运行,系统将调用 onDestroy()。

onDestroy

销毁 Ativity 之前,系统会先调用 onDestroy()。系统调用此回调的原因如下:

  1. Activity 即将结束(由于用户彻底关闭 Activity 或由于系统为 Activity 调用 finish()),或者
  2. 由于配置变更(例如设备旋转或多窗口模式),系统暂时销毁 Activity
    当 Activity 进入已销毁状态时,与 Activity 生命周期相关联的所有生命周期感知型组件都将收到 ON_DESTROY 事件。
@Override
protected void onDestroy() {
    super.onDestroy();
    Log.d(LOG_TAG,"onDestroy");
}

执行log如下:

首次启动:

2020-08-18 14:39:39.171 17120-17120/com.example.myactivity D/MyActivity: onCreate
2020-08-18 14:39:39.175 17120-17120/com.example.myactivity D/MyActivity: onStart
2020-08-18 14:39:39.176 17120-17120/com.example.myactivity D/MyActivity: onResume

点击home键:

2020-08-18 14:40:18.172 17120-17120/com.example.myactivity D/MyActivity: onPause
2020-08-18 14:40:18.711 17120-17120/com.example.myactivity D/MyActivity: onStop
2020-08-18 14:40:18.718 17120-17120/com.example.myactivity D/MyActivity: onDestroy
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值