生命周期回调方法演示
形式:单独完成
题目:生命周期回调方法演示
要求:按照讲课笔记完成,在七个回调方法输出调试信息
(一) Activity生命周期回调方法
1、onCreate()回调方法
- 您必须实现此回调,它会在系统首次创建 Activity 时触发。Activity 会在创建后进入“已创建”状态。在 onCreate() 方法中,您需执行基本应用启动逻辑,该逻辑在 Activity 的整个生命周期中只应发生一次。例如,onCreate() 的实现可能会将数据绑定到列表,将 Activity 与 ViewModel 相关联,并实例化某些类作用域变量。此方法会接收 savedInstanceState 参数,后者是包含 Activity 先前保存状态的 Bundle 对象。如果 Activity 此前未曾存在,Bundle 对象的值为 null。
- 如果您有一个生命周期感知型组件与您的 Activity 生命周期相关联,该组件将收到 ON_CREATE 事件。系统将调用带有 @OnLifecycleEvent 注释的方法,以使您的生命周期感知型组件可以执行已创建状态所需的任何设置代码。
2、onStart()回调方法
- onCreate() 退出后,Activity 将进入“已启动”状态,并对用户可见。此回调包含 Activity 进入前台与用户进行互动之前的最后准备工作。
3、onResume()回调方法
- 系统会在 Activity 开始与用户互动之前调用此回调。此时,该 Activity 位于 Activity 堆栈的顶部,并会捕获所有用户输入。应用的大部分核心功能都是在 onResume() 方法中实现的。
- onResume() 回调后面总是跟着 onPause() 回调。
4、onPause()回调方法
- 当 Activity 失去焦点并进入“已暂停”状态时,系统就会调用 onPause()。例如,当用户点按“返回”或“最近使用的应用”按钮时,就会出现此状态。当系统为您的 Activity 调用 onPause() 时,从技术上来说,这意味着您的 Activity 仍然部分可见,但大多数情况下,这表明用户正在离开该 Activity,该 Activity 很快将进入“已停止”或“已恢复”状态。
- 如果用户希望界面继续更新,则处于“已暂停”状态的 Activity 也可以继续更新界面。例如,显示导航地图屏幕或播放媒体播放器的 Activity 就属于此类 Activity。即使此类 Activity 失去了焦点,用户仍希望其界面继续更新。
- 您不应使用 onPause() 来保存应用或用户数据、进行网络呼叫或执行数据库事务。有关保存数据的信息,请参阅保存和恢复 Activity 状态。
- onPause() 执行完毕后,下一个回调为 onStop()或 onResume(),具体取决于 Activity 进入“已暂停”状态后发生的情况。
5、onStop()回调方法
- 当 Activity 对用户不再可见时,系统会调用 onStop()。出现这种情况的原因可能是 Activity 被销毁,新的 Activity 启动,或者现有的 Activity 正在进入“已恢复”状态并覆盖了已停止的 Activity。在所有这些情况下,停止的 Activity 都将完全不再可见。
- 系统调用的下一个回调将是 onRestart()(如果 Activity 重新与用户互动)或者 onDestroy()(如果 Activity 彻底终止)。
6、onRestart()回调方法
- 当处于“已停止”状态的 Activity 即将重启时,系统就会调用此回调。onRestart() 会从 Activity 停止时的状态恢复 Activity。
- 此回调后面总是跟着 onStart()。
7、onDestroy()回调方法
- 系统会在销毁 Activity 之前调用此回调。
- 此回调是 Activity 接收的最后一个回调。通常,实现 onDestroy() 是为了确保在销毁 Activity 或包含该 Activity 的进程时释放该 Activity 的所有资源。
(二)回调方法演示
1、创建安卓应用
- 基于Empty Activity模板
- 配置项目信息
- 单击【Finish】按钮,完成项目初始化
2、主布局资源文件
- 将约束布局改成线性布局,并设置标签控件相关属性
3、字符串资源文件
- 在
strings.xml
文件里修改app_name
变量值,添加新变量test_life_cycle
4、主界面类实现功能
- 在
MainActivity
里定义标记常量TAG
- 在
onCreate
和onDestroy
回调方法里输出一条调试信息
- 在
onStart
和onStop
回调方法里输出一条调试信息
- 在
onResume
和onPause
回调方法里输出一条调试信息
- 在onRestart回调方法里输出一条调试信息(在完全不可见⟹⟹完全可见的过程中)
- 查看MainAcitivity源代码
package net.cgh.lifecycle;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private final static String TAG = "life_cycle";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG,"onCreate invoked.");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart invoked.");
}
@Override
protected void onResume(){
super.onResume();
Log.d(TAG,"onResume invoked.");
}
@Override
protected void onPause(){
super.onPause();
Log.d(TAG,"onPause invoked.");
}
@Override
protected void onStop(){
super.onStop();
Log.d(TAG,"onStop invoked.");
}
@Override
protected void onRestart(){
super.onRestart();
Log.d(TAG,"onRestart invoked.");
}
@Override
protected void onDestroy(){
super.onDestroy();
Log.d(TAG,"onDestroy invoked.");
}
}
5、添加消息过滤器
- 为了更好地查看本应用的调试信息,需要添加消息过滤器。创建消息过滤器life_cycle_filter,日志标记为life_cycle
6、启动应用,查看日志
-
启动应用,查看LogCat里的消息(然后我们切换应用状态:前台⟹ \Longrightarrow⟹后台⟹ \Longrightarrow⟹前台⟹ \Longrightarrow⟹关闭)
-
单击【Home】键,返回手机应用桌面
-
此时,应用窗口被桌面遮住,查看日志消息
-
单击【Overview】键,查看最近应用列表
-
最近打开的应用就是【生命周期】
-
单击在后台运行的【生命周期】应用,其窗口又重回前台,查看日志信息
-
按【Back】按键,其实无法关闭【生命周期】应用
-
应该按【Overview】键,选中【生命周期】应用向上滑动,即可关闭该应用
-
从日志信息可以看出三层架构
1、最外层(onCreate - onDestory)——(存在 - 不存在)
2、中间层(onStart - onStop)—— (可见 - 不可见)
3、最内层(onResume - onPause)—— (可交互 - 不可交互) -
查看操作录屏