前文
由于EventBus的源码还是比较的复杂的,打算使用五篇文章从浅入深的分析它的源码。包括:
- post流程的分析
- register流程分析(反射方式)【本文】
- register流程分析(注解方式)
- stickey消息实现和处理
- 最佳实践
由于EventBus的源码还是比较的复杂的,打算使用五篇文章从浅入深的分析它的源码。包括:
他是LiveData的一个子类,通过依赖"androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
可以引入。他的主要作用是可以接管多个普通的LiveData,把他们统一起来然后进行管理。
比如在一个Fragment中,我们有多个请求,我们就需要一个请求对应一个LiveData,然后在我们的Fragment中手动的对每个LiveData进行数据监测,这是比较麻烦的,我们可以通过MediatorLiveData来比较优雅的实现。
more >>LiveData的主要作用是可以通过观察者模式进行异步的通知,我们使用它的主要场景就是把网络数据,数据库数据等通过异步的方式通知UI。他的优点是可以避免内存泄漏,与生命周期关联起来,回调也是在主线程中。
more >>SavedState组件是用于保存和恢复数据,替换onSaveInstanceState
方法。我们的数据会因为Activity/Fragment被系统回收,屏幕旋转等导致丢失,除了常规的onSaveInstanceState
中去保存以外,我们可以使用savedstate
组件,他可以结合ViewModel,LiveData一起使用,比较的灵活简便。
ViewModel是Jetpack提供给我们使用的一个组件,他的作用是可以作为View和Model的中介,使得数据和页面分离,同时能避免内存泄漏的问题。
more >>我们这里主要是分析Lifecycle的两个组件,他们是
1 | implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" |
lifecycle-process
是用来感知整个应用的生命周期,比如我们要知道当前引用处于前台还是后台。lifecycle-service
是用来感知Service的生命周期的。
我们在分析Lifecycle源码之前先看下FastSafeIterableMap的源码,因为Lifecycle组件的关键类LifecycleRegistry使用到,而且是关键的属性。
首先,他继承自SafeIterableMap
,而SafeIterableMap
继承自Iterable<Map.Entry<K, V>>
。我们就先分析SafeIterableMap
的源码
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true