240 发简信
IP属地:广东
  • 人生节点 | 2021年终总结&2022年度计划

    我是一名Android开发,目前就职于字节跳动。我毕业来到深圳已经8年多;转行从事Android开发也已5年多。 2021是我年龄上一个重要节点,我二十多岁的青春,用完了。 ...

  • 作者你好,看完后有点疑问,如果按上面的例子来看,数据的储存和生命周期的对应都可以由LiveData单独实现了吧,自己封装一个类来管理liveData也可以的吧,这里用ViewModel的优势在哪里呢?

    “终于懂了“系列:Jetpack AAC完整解析(三)ViewModel 完全掌握!

    Jetpack AAC 系列文章:“终于懂了“系列:Jetpack AAC完整解析(一)Lifecycle 完全掌握![https://www.jianshu.com/p/7...

  • 整个指纹密码流程下来,你添加的密钥起到了什么作用呢

    Android开发 多语言、指纹登录、手势登录

    简介 随着互联网的发展不光手机配置越来越高,app产品要求也越来越高了。现在做APP时产品都会让我们加上 多语言、指纹登录、手势登录等功能。下面代码完全适配Android8....

  • 120
    Android线上轻量级APM性能监测方案

    Github 链接 Collie [https://github.com/happylishang/Collie] App性能如何量化 如何衡量一个APP性能好坏?直观感受...

  • Android热更新一:JAVA的类加载机制

    很早之前就想深入的研究和学习一下热修复,由于时间的原因一直拖着,现在才执笔弄起来。 Android而更新系列:Android热更新一:JAVA的类加载机制Android热更新...

  • 120
    【背上Jetpack之ViewModel】即使您不使用MVVM也要了解ViewModel ——ViewModel 的职能边界

    系列文章 【背上Jetpack】Jetpack 主要组件的依赖及传递关系【背上Jetpack】AdroidX下使用Activity和Fragment的变化【背上Jetpack...

  • 120
    Jetpack ViewModel

    在说起Jetpack的ViewModel时,我们第一反应都会想到它就是MVVM中的VM。然而这两者并不是等价关系,Jetpack的ViewModel它只是官方为我们提供的一个...

  • 120
    Android Jetpack ViewModel解析

    前言 最近几天把Jetpack中的3剑客Lifecycle+ViewModel+LiveData的使用和原理学习了一遍,这3者也是构建MVVM模式的核心。这个系列的工具,建议...

  • 120
    Android Jetpack LiveData解析

    目前关于LiveData源码解读的文章非常多了,本文就不重复了,这里只对核心流程做解读。关于源码流程,推荐:Android livedata 源码解剖 系列文章 Androi...

  • 感觉你说的“内存泄漏的本质是什么?”下面的内容确实有点问题。
    LiveData.observe(owner,ovserver){
    ......
    LifecycleBoundObserver wrapper = new LifecycleBoundObserver(owner, observer);//1
    ObserverWrapper existing = mObservers.putIfAbsent(observer, wrapper);//2
    ......
    owner.getLifecycle().addObserver(wrapper);//3
    }
    上面两行确实决定了Activity/Fragment与LiveData.LifecycleBoundObserver的相互引用,(注释1)决定了LiveData.LifecycleBoundObserver引用到Activity/Fragment,(注释3)决定Activity/Fragment引用LiveData.LifecycleBoundObserver。
    但是LiveData.LifecycleBoundObserver的detachObserver()方法的实现为:
    LiveData.LifecycleBoundObserver.detachObserver() {
    mOwner.getLifecycle().removeObserver(this);
    }
    它与上面注释2对应,仅仅是让Activity/Fragment不再引用LiveData.LifecycleBoundObserver。其实这里虽然LiveData.LifecycleBoundObserver保持着Activity/Fragment的引用,但是如果LiveData.LifecycleBoundObserver没有被其他对象引用上,也就不能被GCRoot给链接上,则不会影响它的回收。
    同时(注释2)处使得LiveData引用到了LiveData.LifecycleBoundObserver,于是就有了LiveData->LiveData.LifecycleBoundObserver->Activity/Fragment,这才是可能导致内存泄漏的关键点。
    那是什么时候断掉这条引用链的呢?
    LiveData.LifecycleBoundObserver.onStateChanged(source, event) {
    if (mOwner.getLifecycle().getCurrentState() == DESTROYED) {
    removeObserver(mObserver);
    return;
    }
    }
    LiveData.LifecycleBoundObserver在监听到Activity/Fragment DESTROYED的时候调用了LiveData.removeObserver(mObserver)。
    LiveData.removeObserver(mObserver){
    ......
    ObserverWrapper removed = mObservers.remove(observer);
    ......
    }
    在这里LiveData直接断掉了对LiveData.LifecycleBoundObserver的引用。LiveData-/->LiveData.LifecycleBoundObserver->Activity/Fragment
    到此为止LiveData.LifecycleBoundObserver->Activity/Fragment的引用关系其实一直还存在的,但是LiveData.LifecycleBoundObserver已经是一个孤立对象,所以不影响它的回收。

    Android Jetpack LiveData解析

    目前关于LiveData源码解读的文章非常多了,本文就不重复了,这里只对核心流程做解读。关于源码流程,推荐:Android livedata 源码解剖 系列文章 Androi...

  • 120
    Android DataBinding 快速上手

    **Data Binding**顾名思义就是数据绑定,2015年谷歌I/O大会上发布了DataBinding,它是一个数据绑定框架,是一种对MVVM的实现,MVVM模式就相当...

  • Android面试知识点总结

    昨天发了一片文章《Android近期面试总结》,其实这篇文章主要还是对于自己前一段时间所做的事情的总结。对大家的价值并不是很大。而有一位将要实习的同学讲“先收藏,到时候再来看...

  • 120
    我怎么又挂了?——面试中那些低级又致命的失误

    注:本文章只代表个人观点。 最近一段时间聊了一些候选人。发现大多数的候选人都是被一些低级又致命的失误PASS掉的。今天整理一些,希望各位同学在这金三银四的时间段,不要因为这些...