Jectpack 笔记

1.LifeCycle 听课总结
1.lifyCycle 的使用
    一:当项目升级到Androidx 之后 appCompatActivity 继承的 CompotentActivity 会实现 LifecycleOwner 接口    getLifecycle 返回的就是Lifecycle   在activity中 直接 getLifecycle.addObserver( LifecycleObserver observer)
    二:继承   LifecycleObserver 方法要使用注解       
   @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public fun disConnectOnDestroy() {   }
   三:继承  defaultLifecycleObserver  不需要使用注解

2.lifecycle 关键的类
  Event  事件

   ON_CREATE  
   ON_START
   ON_RESUME
   ON_PAUSE
   ON_STOP
   ON_DESTORY
   ON_ANY

  State 状态
   
   INITIALIZED
   DESTORY          --> ON_DESTORY
   CREATE             --> ON_CREATE   ON_STOP
   ONSART           --> ON_START    ON_PAUSE
   ONRESUME      --> ON_RESUME

3.lifecycle 源码
  事件--》状态--》事件
  总体的操作 是通过反射实现
  addObserver 方法就是  将观察者  放到一个mCallbackmap里面  
  lifeCycle   能实现监听的原理:其实是在actiivty(CompotentActivity) 中放入个没有没有界面reportFreagment  通过这个这个freagment里面的声明周期进行监听  调用 dispatch方法    
                  dispatch方法里面对是那个生命周期做判断      枚举比较大小  做向前向后操作  获取状态  由状态推理事件  知道事件之后在进行反射处理

问题: addObserver  将观察者存到  mObserverMap中  怎么和ComponentActivity 中进行 reportfreament 中diapath方法中获取状态  状态获取事件    获取事件 在反射 进行关联

 在由状态获取事件  判断是向前还是向后的时候用到了 ObserverMap


LiveData  

liveData个人理解  :(和EventBus功能类似)使用观察者设计模式 ,即是观察者 也是被观察者   调用observe 设置监听    子线程中 postvalue(postvalue 后面也是调用value)   主线程 value 设置值 从而回调到observe onChange方法中
liveData   粘性数据 (数据倒灌):产生的原因 先setvalue值  mVersion++ 在observer 的时候 有个判断   if (mLastVsersion>=mversion)判断  mLastVersion为-1  mVersion因为做了 ++操作所以 mversion为0  不符合前面的判断  直接走下面的代码  调用onchange方法进行数据分发操作
粘性数据解决方法 :  使用hook 反射 获取到mVersion  将值赋值给mlastVersion    使得两个参数对其(也就是相等)       

    LiveData 怎么感知生命周期感知?需要取消注册吗?
      1.通过Lefecycle感知生命周期 Observe 第一个参数就是LifecycleOwer 第二个是observer (只有onChange 一个回调) 调用两个参数 封装成一个 lifeCycleBoundObserve  最后将lifeCycleBoundObservezuowei 参数放到owner.getLifeCycle.setObserve("参数中")  
        不需要手动取消注册   因为liveData 有感知生命周期功能  当是DESTORY状态时  会调用removeObserve
    setValue 和 postValue 有什么区别
       setvalue 只能在主线程    postValue 在子线程  (其实可以在任何线程)
    设置相同的值,订阅的观察者们会收到同样的值吗
       会受到同样的值的 ,liveData多个订阅  如果收不到同一个值 那这个控件就不能用的了
    粘性事件原理,怎么防止数据倒灌
      解释看上面 liveData 粘性数据分析
    observeForever怎么用
     和observe 一样的使用  不传lifeCycleOwner  所以没有感知生命周期能力 ,并且Destory 状态  需要手动释放监听

ViewBanding
 直接能获取view 不用findviewbyId    和kotlin-android-extensions  插件效果一样   区别点是  使用插件在当前的activity中 不光能获取到自己的布局控件 也能获取到其他的activity的布局控件  如果使用viewbing的话只能获取到自己布局的控件
DataBinding
原理:DataBinding 会将layout 布局中  data部分和控件布局部分分为两个 布局文件     布局控件都会设置tag  两个控件通过tag关联  
         例如是 test.xml  文件 会生成 一个test-layout.xml (data相关操作) text.xml (布局相关操作)
耗内存地方: 1.会将布局所有的控件  放到一个Object[ ]数组中
                      2.view ->moule  module->view  本质上面都是 使用的监听器   布局越多监听器越多,还有一点就是 只要布局或是moule一变化就要做相应的处理  这样也消耗性能(这个也是优点)

开发设置模式:
mvc
mvp
mvvm
赋值  @{user.name}  单向 mode-->view
         @={user.name}  双向   view-->mode  mode-view


ViewModule
1.保持数据的稳定性 横竖屏切换数据不会丢失,  CompontActivity中 有个 onRet方法 是监听横竖屏切换的  这里面做了判断的  竖屏切换到横屏 会把mviewmodulestore(包含了viewmodule数据)所以数据稳定
2.横竖屏也经历 ondestory 事件了  怎么没有被清除掉
  viewmodule 生命周期很长  依靠的是lifecycle  avtivty 经历了ondestory 状态  才会被销毁  (这里面有个条件的 ischangingconfigurations 为false的才会回收 )当横竖屏切换的时候 ischangingconfiguretion为true 所以不会被回收

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值