首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android Jetpack 组件之 ViewModel 详解

    ViewModel 具有生命周期意识,会自动存储和管理 UI 相关的数据,即使设备配置发生变化后数据还会存在,我们就不需要在 onSaveInstanceState 保存数据,在 onCreate 中恢复数据了...开始,ViewModelProviders 主要提供四个静态方法获取对应的 ViewModelProvider,四个静态方法如下: public static ViewModelProvider of...那就来看一下 ViewModelProvider,ViewModelProvider 中两个关键属性: private final Factory mFactory; private final ViewModelStore...,实际上像 FragmentActivity 、Fragment 等都间接或直接实现了这个接口,这一点和 LifecycleOwner 一样,源码参考如下: Activity 间接实现: ```java...如何简化 Fragment 之间的通信 Fragment 之间的通信以前是使用接口通过宿主 Activity 转发来实现的,现在可以使用同一 ViewModel 完成两个 Fragment 之间的通信,

    1.6K10

    Android Architecture Components Part4:ViewModel

    这就实现了在Activity中的ViewModel持久化特性。由于ViewModel是同一个,自然它里面的数据也是同一份。 得到ViewModel后,剩下的就是对数据的操作与响应。...ViewModelProvider 到这里我想你心中可能会有如下几个疑问 ViewModel它是如何初始化的,对象是如何实例化的 如何向ViewModel中传递初始化的参数 这两个疑问都将由ViewModelProvider...我们回到获取ViewModelProvider的ViewModelProviders.of()方法,进入源码查看。...AndroidViewModelFactory重新实现了create(),在重写的方法中我们找到了我们想要的方法调用。...下面的能够初步体现使用AAC后的App项目架构形态 ? 最后感谢大家对AAC架构系列的支持!如果感觉不错的话,可以帮忙点赞转发一下,谢谢!同时文章中的代码都可以在Github中获取到。

    72320

    Android从零开始搭建MVVM架构(3)——ViewModel

    ViewModel类是被设计用来以可感知生命周期的方式存储和管理 UI 相关数据,ViewModel中数据会一直存活即使 activity configuration发生变化。...ViewModel 生命周期是贯穿整个 activity 生命周期,包括 Activity 因旋转造成的重创建,直到 Activity 真正意义上销毁后才会结束。...1.实例化的代码 ViewModelProviders.of(activity,factory).get(MyViewModel.class) 1)首先是ViewModelProviders 的 of...activity 的了 ,重点看这里引出了一个 Factory,不带Factory的方法只是通过initializeFactoryIfNeeded初始化了一个sDefaultFactory(Factory的实现类...至此ViewModelProviders of 做了哪些事情呢: 1、初始化了ViewModelProvider内部维护了 用于创建 VM 的 Factory,和用户存放 VM 的ViewModelStore

    1K20

    浅谈ViewModel

    5 源码分析 带着两个小问题简单的进行下源码分析: 1) ViewModel与Activity / Fragment的映射关系是如何建立起来的?...(以Activity为例) 第一部分:获取ViewModelProvider 调用ViewModelProviders.of(Activity); 一路调用,最终走到HolderFragmentManager.holderFragmentFor...如果HolderFragment尚未create,Activity就已经销毁,则从HashMap中移除该Activity,防止泄露; HolderFragment成功创建后,从HashMap中移除该Activity...; 使用HolderFragment持有的ViewModelStore对象完成ViewModelProvider的创建; 第一部分的职责是构建 / 查找HolderFragment,对构建过程中的异常做保护...整个映射逻辑也可以简化为:通过Activity类名找ViewModel实例; 2) ViewModel的生命周期如何管理?

    2.9K90

    在Java 11中,如何处理被弃用的类或接口?

    在Java 11中处理被弃用的类或接口时,核心原则是使用官方推荐的替代方案,避免依赖过时API以确保代码的兼容性和可维护性。以下是具体处理方式和示例:1.....* 包下的类)这些类属于JDK内部实现,不保证跨版本兼容性,Java 11中许多此类被标记为弃用。...替换AWT相关弃用类示例3:com.sun.awt.AWTUtilities → 标准java.awt方法// 被弃用的类// import com.sun.awt.AWTUtilities;// AWTUtilities.setWindowOpacity...处理反射相关弃用类示例4:sun.reflect.Reflection → java.lang.StackWalker// 被弃用的类// import sun.reflect.Reflection;/...处理原则总结优先使用标准库:用java.*包下的类替代sun.*等内部API。 引入第三方库:对于移除的Java EE模块,使用Jakarta EE等替代实现。

    18710

    Jetpack 最新release版本升级 | 杂谈

    configurations { all*.exclude group: 'androidx.lifecycle', module: 'lifecycle-extensions' } 或者你可以考虑下用我的另外一种写法...你能对于gradle的一个重要的configuration有一个更深入的了解 ViewModelProviders被移除了 我们碰到的第二个问题就是在最新版本中ViewModelProviders被移除了...这部分其实也还是比较简单的,因为我们上面剔除了旧的依赖,所以我们的项目内项目内其实已经没有了ViewModelProviders的代码了。...package androidx.lifecycle @Deprecated("ViewModelProviders adapter not support any more") object ViewModelProviders...这次在我们升级的过程中,我们发现了有一部分仓库直接用了androidx.activity:activity-ktx和androidx.fragment:fragment-ktx。

    1.7K10

    Jetpack:ViewModel

    1.引入背景 引入ViewModel之前,存在如下几个问题: (1)有的时候一个Activity里面嵌套了多个fragment,但是这些fragment里面用的是同一个数据,为了同步这些数据,我们需要用接口来传参...如果数据类型比较简单,同时数据量也不大,可以通过onSaveInstanceState()存储数据.但如果是大量数据,不方便序列化及反序列化,则上述方法将不适用. 2.ViewModel的使用 (1)gradle中引入...class UserModel extends ViewModel { String name; int age; } (3)获取ViewModel UserModel model = ViewModelProviders.of...getViewModelStore(); } return holderFragmentFor(fragment).getViewModelStore(); } 如果实现了...ViewModelStoreOwner,就返回ViewModelStore,否则就新生成一个HolderFragment来获取ViewModelStore 那就进去看看HolderFragment如何实现

    84820

    Android LiveData 使用详解

    在实际使用中,用得比较多的是 MutableLiveData。他常常结合 ViewModel 一起使用。下面,让我们一起来看一下怎样使用它?...的 of 方法,他主要有四个方法,分别是 ViewModelProvider of(@NonNull Fragment fragment) ViewModelProvider of(@NonNull...如果用传统的方式来实现,那么我们一般才采取观察者的方式来实现,这样,当我们需要观察数据的时候,我们需要添加 observer,在界面销毁的时候,我们需要移除 observer。...但是,如果我们用 LiveData 来实现的话,它内部逻辑都帮我们封装好了,我们只需要保证 AccountLiveData 是单例的就ok,在需要观察的地方调用 observer 方法即可。...这里 AccountLiveData 的实现就不贴出来了,可以参考上面的 NetworkLiveData 实现 ---- 小结 这里说一点关于 LiveData 与 ViewModel 的应用场景吧,我尽量说得通俗一点

    5.1K40

    Android经典面试题之ViewModel生命周期穿透的3种黑科技实现

    大家好,我是稳稳,一个曾经励志用技术改变世界,现在为随时失业做准备的中年奶爸程序员,与你分享生活和学习的点滴。 连续熬夜真是吃不消啊!加油!加油! 引言:为什么开发者需要ViewModel?...一、HolderFragment:寄生在Activity中的“数据保险箱” 原理剖析 当调用ViewModelProviders.of(activity)时,系统会动态注入一个无UI的HolderFragment...实现技巧 通过扩展ViewModelProvider的owner参数,支持Activity/Fragment/Navigation图等不同作用域 在Fragment中调用ViewModelProviders.of...生命周期:ViewModel存活到组件完全销毁(如Activity调用finish()),而Bundle仅在临时重建时有效 性能对比:ViewModel通过内存缓存避免序列化开销,性能提升约30倍 Q2:如何实现自定义生命周期的...通过ViewModelProvider.Factory注入自定义作用域 3.

    38010
    领券