2018 年的 Google I/O 大会上,Google 发布了 Android Jetpack,并称其为下一代的 Android 组件,旨在帮助开发者加快应用开发速度。准确来讲,Jetpack 是一系列 Android 软件组件的集合,它包括基础组件、架构组件、行为组件、界面组件。其中的 Android Architecture Components 指的就是这里的 “架构组件”。
Android Architecture Components 是 Google 推荐的一个构建 APP 的应用架构,它包含了一些列架构相关组件。而本篇文章我们要介绍的 Lifecycle 就是其中的一个与生命周期相关的库,同时,Lifecycle 也跟 LiveData 和 ViewModel 两个库紧密联系,想要搞懂后两者,就必须先搞懂它。
具体各组件之间的关系,以及各自在 Jetpack 中的地位,可以参见下面两幅来源于官网的图片。
Lifecycle 的作用
Lifecycle 是具有生命周期感知能力的组件,也就是说,我们能在 Activity 或者 Fragment 的生命周期发生变化的时候得到通知。我们往往会在 Activity 的各种生命中周期方法里执行特定的方法,比如,进行广播的注册和解绑、Eventbus 的注册和解绑等:
public class TestActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
}
@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
protected void onDestroy() {
EventBus.getDefault().unregister(this);
super.onDestroy();
}
}
如果我们把很多这种需要跟生命周期相关的逻辑代码都直接放在 Activity 的生命周期方法中,Activity 将会变得难以维护。通过 Lifecycle,我们就能避免这种问题。因为本质上我们需要的只是 Activity 或者 Fragment 的生命周期发生改变的时候能通知到我们,以便我们在对应生命周期中执行对应的方法。
Lifecycle 的基本使用
2.0、 导入 Lifecycle 依赖
Lifecycle 被包含在 support library 26.1.0 及之后的依赖包中,如果我们的项目依赖的支持库版本在 26.1.0及以上,那么不需要额外导入 Lifecycle 库,本篇例子中使用的支持库是 28.0.0 :
implementation ‘com.android.support:appcompat-v7:28.0.0’
如果支持库版本小于 26.1.0 ,就需要单独导入 Lifecycle 库 :
implementation “android.arch.lifecycle:runtime:1.1.1”
当然,如果项目已经迁移到了 AndroidX,可以使用下面的方式引入 :
implementation “androidx.lifecycle:lifecycle-runtime:2.0.0”
还是建议大家尝试尽快把项目迁移为AndroidX,因为很多更新,会最先在 AndroidX 中发布,逐渐摆脱传统的support包。比如这里要讲的 Lifecycle 在 AndroidX 中已经升级到了 2.x 版本,而支持库中还是 1.x 版本。
鉴于支持库一般都在 26.1.0 以上,并且尚有大部分用户未迁移到AndroidX,在本篇文章中,我们使用 support library 28.0.0
中默认包含的 Lifecycle 库。我们在项目的 app 目录下的 build.gradle
文件中添加以下依赖:
implementation ‘com.android.support:appcompat-v7:28.0.0’
以 support library 版本在 26.1.0 及以上为前提,这里我们分两种情况来讲。一种是我们创建的Activity 继承自 AppCompatActivity(以Activity 为例,Fragment类似),另一种是创建的 Activity 继承自普通的 Activity,而非 AppCompatActivity。
这里要先说一点, Lifecycle 的实现机制是观察者模式,整体上知道了这个,再讲它的使用过程就比较容易理解了:
1. 构建一个 Lifecycle 对象(通过一个实现了 LifecycleOwner 接口的对象的 getLifecycle()
方法返回),这个对象就是一个被观察者,具有生命周期感知能力
2. 构建一个 LifecycleObserver 对象,它对指定的 Lifecycle 对象进行监听
3. 通过将 Lifecycle 对象的 addObserver(…) 方法,将 Lifecycle 对象和 LifecycleObserver 对象进行绑定
2.1、 继承自 AppCompatActivity
首先,我们创建一个 MyObserver.java 类,让它实现 LifecycleObserver 接口( LifecycleObserver 接口是一个空接口,主要是给注解处理器使用),如下:
public class MyObserver implements LifecycleObserver {
private static final String TAG = “MyObserver”;
// 使用注解 @OnLifecycleEvent 来表明该方法需要监听指定的生命周期事件
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void connectListener() {
// …
Log.d(TAG, “connectListener: -------- onResume” );
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void disconnectListener() {
// …
Log.d(TAG, “disconnectListener: ------- onPause”);
}
}
可以看到,我们通过在方法上使用@OnLifecycleEvent
注解使得该方法具有了生命周期感知能力。括号里面的参数,表明需要监听的是什么生命周期事件。Lifecycle 主要就是通过 Event
和 State
这两个枚举类来跟踪所关联组件的生命周期状态。具体的 Event 和 State 之间的转换关系,可以参照下图:
接下来,让我们的 Activity 继承自 AppCompatActivity,然后在 onCreate(…) 方法中通过getLifecycle().addObserver(new MyObserver())
完成 Lifecycle 和LifecycleObserver 的绑定。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 就只需要这一行代码,简洁吧
getLifecycle().addObserver(new MyObserver());
}
}
然后我们就可以运行下程序,切换到 Home 也或者按返回键,就能看到随着生命周期的变化,MyObserver() 中定义的方法在控制台中也被正确地打印了出来。
是不是觉得特别简单。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
写在最后
本次我的分享也接近尾声了,感谢你们在百忙中花上一下午来这里聆听我的宣讲,希望在接下来的日子,我们共同成长,一起进步!!!
最后放上一个大概的Android学习方向及思路(详细的内容太多了~),提供给大家:
对于程序员来说,要学习的知识内容、技术有太多太多,这里就先放上一部分,其他的内容有机会在后面的文章向大家呈现出来,不过我自己所有的学习资料都整理成了一个文档,一直在不断学习,希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!
Android架构师之路很漫长,一起共勉吧!
如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。
[外链图片转存中…(img-NWMu0ifD-1712233616593)]