首页
学习
活动
专区
圈层
工具
发布

Android Architecture Components Part4:ViewModel

所以它能够更好的帮助我们实现持久化数据,防止不必要的数据请求,提高App的性能。 是不是有点好奇了呢,下面我们来简单介绍它的使用,为什么说简单呢?...的实例,通过ViewModelProviders.of()方法传入Activity对象,它会返回一个ViewModelProvider对象,然后我们再使用它的get()来根据不同的ViewModel的Class...AndroidViewModelFactory重新实现了create(),在重写的方法中我们找到了我们想要的方法调用。...这样我们所需要的ViewModel实例就创建了,第一个疑问就此解决。 至于第二个疑问,细心的话不难发现,上面在调用newInstance()方法时已经传了一个初始化的参数mApplication。...中,使得数据达到持久化,减少不必要的数据请求与资源消耗。

64420
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    ViewModel类是被设计用来以可感知生命周期的方式存储和管理 UI 相关数据,ViewModel中数据会一直存活即使 activity configuration发生变化。...2.异步回调问题 app 需要频繁异步请求数据,比如调接口请求服务器数据。当然这些请求的回调都是相当耗时的,之前我们在 Activity 或 fragment里接收这些回调。...(T) viewModel; } 逻辑不复杂,先看ViewModelStore是不是已经存了,没有的话就通过 factory 实例化, 并存到 ViewModelStore 中。...void onCleared() { } } Vm 只有一个onCleared方法,那么他是在何时调用的呢 这里就要介绍之前提到的 HolderFragment了: public class...禁止在 ViewModel 中持有 Context 或 activity 或 view 的引用。

    82520

    Jetpack源码解析---ViewModel基本使用及源码解析

    ,然后在onCreate()中恢复过来,但是当这些数据较大时或者数据可能又需要重新请求接口,这时候ViewModel就派上用场了,也就是说当我们把数据保存在ViewModel中,不管Activity和Fragment...源码分析 ViewModelProviders 在使用VM的时候一般都通过val vm = ViewModelProviders.of(this).get(DemoViewModel::class.java..., @NonNull Class modelClass) { //在ViewModelStore中拿到VM实例 ViewModel viewModel = mViewModelStore.get...FragmentActivity继承了它,而ComponentActivity里面通过Lifecycles观察生命周期,当接受到ON_DESTROY的事件时,清空VM。 5....总结 分析完源码之后,我们来总结一下整个流程: 通过ViewModelProviders.of(this).get(DemoViewModel::class.java)创建VM of()方法中传入 fragment.getViewModelStore

    91820

    Android LiveData 使用详解

    当 Actiivty 不是处于激活状态的时候,如果你想 livedata setValue 之后立即回调 obsever 的 onChange 方法,而不是等到 Activity 处于激活状态的时候才回调...回想一下,在你的项目中,是不是经常会碰到这样的问题,当网络请求结果回来的时候,你经常需要判断 Activity 或者 Fragment 是否已经 Destroy, 如果不是 destroy,才更新 UI...在实际使用中,用得比较多的是 MutableLiveData。他常常结合 ViewModel 一起使用。下面,让我们一起来看一下怎样使用它?...Activity 中创建 ViewModel,并监听 ViewModel 里面 mNameEvent 数据的变化,当数据改变的时候,我们打印相应的 log,并设置给 textView,显示在界面上。...,在 Fragment 中创建 ViewModel 的时候,传入的是 Fragment 所依附的 Activity。

    5K40

    【Jetpack】ViewModel + LiveData + DataBinding 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

    DataBinding 结合使用时 , 在 DataBinding 布局中设置的就是该 视图模型 类对象 ; 该 ViewModel 类中 , 还 使用了 LiveData , 可以实时监听数据改变...)).get(MyViewModel::class.java) 最后 , 将 视图模型中的数据 设置到 视图组件 中 ; 与 DataBinding 结合使用时 , 将 ViewModel 对象设置到..., 可以将 运行过程中 ViewModel 中的 Model 模型数据改变 通知 视图 View , 令视图组件显示最新的数据内容 ; 在 ViewModel 中使用了 LiveData 后 , 必须调用...Model / 视图模型 ViewModel 视图 View DataBinding 中除了绑定 数据模型 Model 之外 , 还可以直接绑定 视图模型 ViewModel , 这是 DataBinding...DataBinding 中配置 Model 数据模型对象 或者 ViewModel 视图模型对象 , 在本示例中配置的是 ViewModel 实例对象 ; 配置 Model 数据模型对象 , 那么就是

    2K21

    Android Jetpack - ViewModel

    而我们传统的处理办法就是在配置变更期间保留对象和自行处理配置变更这两种,这两种方式都有很多坑(看看官方文档就知道了),尤其是需要恢复的数据比较多的时候,而 ViewModel 就非常适合处理这些情况 在下图中...,你可以看到一个 Activity 旋转过程的生命周期,绿色部分是与此 Activity 相关联的 ViewModel 的生命周期,图例中只展示了 Activity ,而 ViewModel 也同样可以和...() { private val viewModel by lazy { ViewModelProviders.of(this).get(MainActivityViewModel...UI 控制器中使用 ViewModel 我们在计时开始之前先将系统当前时间存入 viewModel.startTime 变量,而后每次 onCreate 被调用时,都会先取出 viewModel.startTime...by lazy { ViewModelProviders.of(this).get(CustomTimerViewModel::class.java) } @SuppressLint

    1K20

    Android Jetpack架构组件(三)之ViewModel

    简介 在早期的Android开发中,由于应用相对较小,页面相对简单,我们会将数据请求、页面UI处理和数据加载全部放在Activity或Fragment中进行,但是随着项目的迭代,这种开发方式显得越来越臃肿...在JetPack架构中,ViewModel组件是一个可以感知生命周期的形式来存储和管理视图相关的数据的组件,因此它适合以下场景。 适合需要保存大量数据的场景。...在Android中,Activity/Fragment主要用于显示视图数据,如果它们也负责数据库或者网络加载数据等操作,那么势必造成代码臃肿,而将逻辑代码放到ViewModel之后,可以更有效的将视图数据相关逻辑和视图控制器分离开来...5.2 ViewModelProvider 在前面的示例代码中,我们在Activity中使用ViewModelProviders.of方法来获取ViewModel实例,如下所示。...会将数据存储在 NonConfigurationInstances 对象中,而NonConfigurationInstances是定义在Activity里面的一个类,如下所示。

    1.5K00

    Android  JetPack~ ViewModel (一)   介绍与使用

    独有的,当Activity真正退出后,它会调用,而不是销毁后调用,因为旋转屏幕也会调用onDestroy。...所以我们可以在这取消网络请求等。平常开发中不做任何操作时,如果有网络请求中,Activity被销毁,那么极有可能请求成功返回结果到activity中造成泄漏等不必要的麻烦。...网络请求时,突然销毁activity,那么与之绑定的viewmodel也会销毁,同时我们在onCleared()方法中取消网络连接接口(call.cancel()),就算是有数据返回,activity也不会收到通知...这个方式比较老了,在源码中也能发现,ViewModelProviders的of方法其实也是调用了ViewModelProvider,自动创建了一个factory。...create是创建一个新的实例,而get是先从HashMap中找,找不到就创建新的实例。

    1.6K40

    Android 架构组件的最新进展 (上篇)

    有没有更好的视图访问方式? ? 视图访问方法当然不止一种,但正如上图所示的,在简明、编译安全和编译速度上,各个方法总有取舍。那有没有一种方法能一石 "三" 鸟呢? 即将到来!...如果只这样粗略地理解的话,ViewModel 和 SavedState 其实是一回事。然而并不是这样的。...而 ViewModel 则一直运行于进程内,即便应用配置发生变化,只要进程还在,ViewModel 保存的内容就不会消失。但只要进程消失,ViewModel 里的内容也会消失。...ViewModel 用于: 保留应用对网络、数据库的请求 当作大型对象的缓存 SavedState 用于: UI 的状态记录,比如选择区域和滚动距离等 导航状态键值记录 各取所长,联手打造流畅体验 //...{ userViewModel = ViewModelProviders.of(this) .get(UserViewModel::class.java) } 而现在只需要一行:

    1K40

    Jetpack系列——ViewModel

    Jetpack为开发者提供了ViewModel的概念,将页面所需要的数据从V层和M层中剥离出来,ViewModel是介于View层和Model层的一个桥梁,使得视图和数据即区分开来,又能保持联系。...接下来,在Activity中创建出ViewModel实例对象,调用其startHandler()方法开始执行: class ViewModelActivity : AppCompatActivity()...= ViewModelProvider(this).get(MyViewModel::class.java) viewModel.startHandler() } } 运行代码会发现...[1240] 上述代码中也介绍了最重要的一个点,那就是ViewModel实例的创建,首先需要创建一个ViewModelProvider类对象,其构造方法中需要传入Activity实例,在androidx...vm : mMap.values()) { vm.clear(); } mMap.clear(); } } get()方法其核心是在调用

    72910
    领券