ActivityLifecycleCallbacks的基本使用

内容简述

1、这是什么?

2、原理

3、使用时需要注意什么?

4、为什么要用它?

5、使用场景

6、怎么用?

参考:https://blog.csdn.net/u010072711/article/details/77090313


参考:http://www.jcodecraeer.com/plus/view.php?aid=7923


问题1:它是什么?

ActivityLifecycleCallBacksApplication的一个内部接口,一般用于APPApplication类,让我们自定义的Application实现它;


问题2:原理:

     Activity 的每一个生命周期都对应 ActivityLifecycleCallbacks 接口中的一个方法,比如 onActivityCreated 回调是在 Activity 的 onCreate 方法中调用 getApplication().dispatchActivityCreated(this, savedInstanceState) 完成对 Activity 生命周期跟踪监听。


问题3: 使用时需要注意什么?

     要求 API 14+


问题4:为什么要用它?

     我们的Application实现ActivityLifecycleCallbacks接口后,系统会在每个Activity执行完对应的生命周期后,调用这个类中所有实现的方法;


问题5:使用场景

  • 应用新开进程假重启处理(低内存回收、修改权限)

  • 管理 Activity 页面栈

  • 获取当前 Activity 页面

  • 判断应用前后台

  • 保存恢复状态值 savedInstanceState

  • 页面分析统计埋点

使用场景一:管理Activity,随时随地退出程序,避免退出程序后,之前进入第三方库的Activity未被销毁清除的情况;

                       我们一般在项目中让我们的Activity都继承自BaseActivity,但是有时APP存在打开第三方库Activity的情况,在这

                       种情况下,在BaseActivityonCreate方法将activity添加到集合中,在onDestory方法中将集合清除,这就出现内存泄露。

                       ActivityLifecycleCallbacks 就派上用场了, App 中的所有 Activity 只要执行完生命周期就一定会调用这个接口实现类的对

                       应方法, 那你就可以在 onActivityCreated 中将所有 Activity 加入集合,这样不管你是不是三方的 Activity 我都可以遍历集

                       合 finish 所有的 Activity

使用场景二:判断APP前后台状态

                       判断应用是否在后台运行,针对前后台运行会做一些处理,比如提示用户应用运行在后台、以及应用前后台切换回

                       调通知等。利用通过监听回调方法 onActivityStarted与onActivityStopped两个方法来判断应用前后台

使用场景三:  应用新开进程假重启处理(低内存回收、修改权限)

                       应用在低内存的情况下退出重新启动,并不会执行正常的启动流程,而是创建新的进程,直接还原上一次的操作页

                       面,导致页面栈信息丢失,页面显示以及返回跳转异常;MainActivity 可能没有执行,部分功能不会初始化。

                       当前操作页面:LoginActivity

                       正常启动使用流程:SplashActivity -> MainActivity -> LoginActivity

                       低内存重启流程:新开进程,直接启动 LoginActivity

                       低内存重启流程存在的问题:页面栈信息丢失,页面显示以及返回跳转异常;MainActivity 可能没有执行,部分功能

                       不会初始化。

解决思路:

                       通过监听回调方法 onActivityCreated,判断应用启动的第一个 Activity 页面是否为 LauncherActivity,如果不是,则强

                       制启动LauncherActivity 来执行正常的启动流程。

使用场景四:

                       获取当前 Activity 页面 

                       通过监听回调方法 onActivityResumed,设置当前 Activity 页面(不常用,React Native 开发会用到)

使用场景五:

                       保存恢复状态值 savedInstanceState

                       Activity 异常退出经常需要保存恢复一些数据,ActivityLifecycleCallbacks 实现数据保存恢复也是比较简单的。 

                      通过监听回调方法onActivityCreated与onActivitySaveInstanceState保存恢复状态值

使用场景六:

                      页面分析统计埋点

                      页面信息统计


问题6:怎么用?

                   在Application中的onCreate方法中,加入代码:registerActivityLifecycleCallbacks(this);

                   注意注册生命周期,实现方法


发布了26 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/xyl826/article/details/104648479
今日推荐