• 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 所以不会被回收

  • 相关阅读:
    【SemiDrive源码分析】系列文章链接汇总(全)
    【工程伦理】脑机接口技术中的伦理问题分析
    工业4.0时代数字化工厂的几个特点
    揭秘未来:用线性回归模型预测一切的秘密武器!
    什么是报表?分析报表在零售行业中的应用,并推荐“免费高质量”的报表工具
    【数据结构】快速排序算法你会写几种?
    3GPP R17覆盖增强
    [网站]node.js如何在云服务器上搭建
    Spring 从入门到精通 (十) 复杂对象详解
    C#WPF Prism框架区域管理应用实例
  • 原文地址:https://blog.csdn.net/qq_23911165/article/details/127919834