首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Android技术专栏

    ViewModel

    幸运的是,ViewModel可以为我们解决这个问题。 ViewModel独立于配置变化,这意味着,屏幕旋转所导致的Activity重建,并不会影响ViewModel的生命周期,如下图所示: 三.ViewModel的基本使用方法   前面提到,ViewModel ViewModel的实例化过程是通过ViewModelProvider来完成的,ViewModelProvider会判断ViewModel是否存在,若存在的话直接返回,否则他会创建一个ViewModel 四.ViewModel和AndroidViewModel   前面提到,ViewModel是独立于配置变化的,它的生命周期比页面长,所以需要注意的一点是:不要向ViewModel传入任何类型的Context ,那么是不是没必要使用ViewModel呢?

    51930编辑于 2023-10-22
  • 来自专栏安卓圈

    ViewModel浅析

    先写一个demo:通过ViewMOdel实现fragment之间的通信 布局: 【activity_main】 <?xml version="1.0" encoding="utf-8"? ; public class SharedViewModel extends ViewModel { private final MutableLiveData<String> selected 因为很多通信其实都是通过底层存储来实现的 ViewModel大部分都用来实现MVVM模型,M层用来操作数据,V层负责展示界面,VM层用来逻辑处理。 = new HashMap<>(); final void put(String key, ViewModel viewModel) { ViewModel oldViewModel = mMap.put(key, viewModel); if (oldViewModel !

    65710发布于 2020-12-29
  • 来自专栏刘晓杰

    Jetpack:ViewModel

    1.引入背景 引入ViewModel之前,存在如下几个问题: (1)有的时候一个Activity里面嵌套了多个fragment,但是这些fragment里面用的是同一个数据,为了同步这些数据,我们需要用接口来传参 (2)屏幕旋转,会销毁重建,如果数据类型比较简单,同时数据量也不大,可以通过onSaveInstanceState()存储数据.但如果是大量数据,不方便序列化及反序列化,则上述方法将不适用. 2.ViewModel 的使用 (1)gradle中引入 implementation 'android.arch.lifecycle:extensions:1.1.1' (2)新建ViewModel实体类 public class UserModel extends ViewModel { String name; int age; } (3)获取ViewModel UserModel model = ViewModelProviders.of 点进去看就知道是HashMap 4.总结 ViewModel说白了就是内部生成一个fragment来管理生命周期,同时用HashMap保存数据,相对简单.它和LiveData以及Lifecycle组合使用会更好

    85520发布于 2020-06-03
  • 来自专栏Coding+

    Android Jetpack - ViewModel

    ViewModel 简述 ViewModel 旨在以生命周期感知的形式存储和管理 UI 控制器(Activity/Fragment 等)相关的数据,可以解决 UI 控制器中数据无法正确保留以及数据在其复杂的生命周期中难以维护的痛点 ViewModel ? 我用一个非常简单的 Demo 来展示它的基础用法,通常我们为 app 集成 ViewModel 遵循如下几个步骤: 1、创建一个继承 ViewModel 的类来分离出 UI 控制器中的数据 2、建立 ViewModel 和 UI 控制器之间的通信 3、在 UI 控制器中使用 ViewModel 1、创建 ViewModel 创建 MainActivityViewModel 并继承 ViewModel class MainActivityViewModel = _startTime } 2、关联 UI 控制器和 ViewModel UI 控制器必须知道自己和哪个 ViewModel 进行关联,这样它才能知道去哪里取回数据,注意,不要在 ViewModel

    1.2K20发布于 2019-08-05
  • 来自专栏QQ音乐技术团队的专栏

    浅谈ViewModel

    2) 构造数据对象 自定义ViewModel类,继承ViewModel; 在自定义的ViewModel类中添加需要的数据对象; public class DemoViewModel extends ViewModel 类获取自定义ViewModel对象; 从自定义ViewModel对象获取数据对象,进行需要的读写操作。 (ViewModel.class); 通过ViewModel的规范名(canonical name),从HashMap中查找是否已经存在该ViewModel的实例。 整个映射逻辑也可以简化为:通过Activity类名找ViewModel实例; 2) ViewModel的生命周期如何管理? } HolderFragment销毁后,调用ViewModelStore.clear(),清理HashMap对ViewModel对象的引用,待系统GC回收ViewModel

    2.9K90发布于 2018-02-01
  • 来自专栏Android知识

    Jetpack系列——ViewModel

    ViewModel独立于组件的配置的变化,也就是说,当发生特殊情况导致Activity重新执行某些生命周期时,ViewModel的生命周期并不会发生变化。 为了证明Activity在执行各生命周期时,ViewModel并不会随之变化,所以我们可以在ViewModel中使用Handler或者RxJava做一个定时循环任务,观测Activity是否会影响ViewModel > mMap = new HashMap<>(); final void put(String key, ViewModel viewModel) { ViewModel oldViewModel 但如果ViewModel中必须要用到Context怎么办呢,可以将ViewModel类继承自AndroidViewModel,AndroidViewModel继承自ViewModel,并且接收Applcation ViewModel不会受Actvity生命周期的影响,那是不是可以使用ViewModel替代onSaveInstanceState()方法呢?

    85010编辑于 2022-01-12
  • 来自专栏Android群英传

    LiveData beyond the ViewModel

    LiveData被设计用来实现观察者模式,允许视图控制器(Activity、Fragment等)和UI数据的来源(通常是ViewModel)之间进行通信。 简而言之,其优点是你不需要在View和ViewModel之间手动取消订阅。 img LiveData beyond the ViewModel 可观察范式在视图控制器和ViewModel之间工作得非常好,所以你可以用它来观察你的应用程序的其他组件,并利用生命周期意识的优势。 每当资源库有新的数据时,ViewModel只需对其进行映射即可。 img 你不能在ViewModel的初始化中创建它们,因为用户ID不是立即可用的。你可以用switchMap来实现这一点。

    2K30编辑于 2021-12-08
  • 来自专栏Android相关

    AAC---ViewModel

    ViewModel介绍 ViewModel是用来保存并且管理与LifeCycle以及UI相关数据的数据结构。 最后,ViewModel非常有效的帮我们从UI Controller隔离了View与数据之间的逻辑关系。 使用ViewModel 在build.gradle中添加配置 dependencies { def lifecycle_version = "1.1.1" // ViewModel and 在Fragment之间共享数据 通过同一个Activity获取到的ViewModel对象相同,所以可以通过ViewModelProvider获取到的ViewModel对象是同一个。 每个Fragment都有自己的生命周期,这样ViewModel不会被任何一个Fragment的周期干扰。

    1K40发布于 2018-10-24
  • 来自专栏ppjun专栏

    ViewModel 源码分析

    主作用是同是通过反射来获取 viewmodel //AndroidViewModelFactory.java public <T extends ViewModel> T create(@NonNull 所以 viewmodel 使用了hashmap来存储 viewmodel 啦。 = new HashMap<>(); final void put(String key, ViewModel viewModel) { ViewModel oldViewModel 并且get的时候 会先从hashmah 中获取viewmodel ,不存在这个viewmodel,再从 mFactory 里面创建 viewmodel ,并存进 hashmap。 if (viewModel !

    1K10发布于 2018-09-05
  • 来自专栏github@hornhuang

    ViewModel 和 ViewModelProvider.Factory:ViewModel 的创建者

    ViewModelProviders 在内部为我们管理并调用 ViewModel 的主构造函数,创建viewmodel的实例并将该实例并返回。 ViewModel’s 实例而失败。 这是由于你在实例化 ViewModel 对象时,不能直接在活动或者碎片中调用 ViewModel 的构造方法,而且你又想去设置 ViewModel 构造方法的参数,因此你需要将参数传入 ViewModelProvider.Factory 它将会帮你创建你的 ViewModel。 当你的 ViewModel 存在依赖项,且你希望测试你的 ViewModel 时,你需要创建自己的 ViewModelProvider.Factory 来通过 ViewModel 的构造方法传递依赖项,

    2.2K20发布于 2021-09-24
  • 来自专栏学海无涯

    SwiftUI监听ViewModel变化

    SwiftUI 中 ViewModel 的变化会引起 UI 的变化,如何能做到监听 ViewModel?常见的有如下几种方式。 ) .rotationEffect(Angle.degrees(degrees)) .onChange(of: viewModel.changingColor ) .rotationEffect(Angle.degrees(degrees)) .onChange(of: viewModel.changingColor , perform: { _ in degrees += 15 }) .task(id: viewModel.number ) { await viewModel.randomColor() } } } Notification class DataService

    77011编辑于 2024-03-10
  • 来自专栏program

    Jetpack组件之ViewModel

    Jetpack为我们提供了ViewModel组件帮我们解决这个问题,ViewModel以注重生命周期的方式存储和管理界面相关的数据。 ViewModel独立于配置变化,就算Activity重建,也不会影响ViewModel的生命周期。 :2.2.0" 使用 首先自定义一个ViewModel,继承ViewModel类。 ViewModel就一直存在,基于这些特性,多个Fragment 可以使用其 Activity 范围共享 ViewModel 来处理此类通信。 final void put(String key, ViewModel viewModel) { ViewModel oldViewModel = mMap.put(key,

    97810编辑于 2022-06-29
  • 来自专栏北洋csdn

    JetPack组件学习ViewModel

    ViewModel的使用 1.需要先创建ViewModel类,继承自ViewModel重写onclear方法,使得页面销毁的时候能够走到自定义的onClear方法中 class MyViewModel fun <T : ViewModel? 上面是利用反射创建了一个带有参数的ViewModel。默认创建的是无参的实例 3.通过get传入对应的Viewmodel的Class对象即可。 final HashMap<String, ViewModel> mMap = new HashMap<>(); final void put(String key, ViewModel viewModel 但是ViewModel是系统原生支持的我们可以直接获取到上次销毁的ViewModel实例数据还在其中 3.具有生命周期可以自动管理防止泄漏,可通过onCleared告知持有该ViewModel的V层销毁

    81410编辑于 2022-05-10
  • 来自专栏半行代码

    ViewModel创建过程详解

    ViewModel 获取通过 ViewModelProvider(activity)[VM::class.java] 今天来探究下 ViewModel 具体是如何创建出来的。 > mMap = new HashMap<>(); final void put(String key, ViewModel viewModel) { ViewModel oldViewModel ,会直接复用这个 ViewModel 实例。 如果不存在,则会使用 factory 去创建我们的 ViewModel 实例。 创建完成后,会把 ViewModel 实例存在 ViewModelStore 中。 从这里我们也可以知道,ViewModel 之前在进程被系统终止之后其实是不会保存数据给 ViewModel 的,在添加了 SaveStateHandle 之后才支持。

    1.5K20编辑于 2022-05-10
  • 来自专栏我和未来有约会

    简练的视图模型 ViewModel

    用其来做MVP模式的silverlight会非常的方便,在正式开始MVP模型的学习前先简单的做了一个视图模型ViewModel的演练。 ?

    1.2K90发布于 2018-01-16
  • 来自专栏花落的技术专栏

    Andorid-JetPack-ViewModel组件

    其实就是ViewModel实例被保存了下来,页面重建之后获取的ViewModel是同一个 2.基本用法 常规用法:存储的数据,仅仅只能当页面因为配置变更导致的销毁再重建时可复用,复用的是ViewModel 复用实现原理 准确点来说,应该是ViewModel如何做到在宿主销毁了,还能继续存在.以至于页面恢复重建后,还能接着复用 肯定是前后获取到的是同一个ViewModel实例对象 我们先来看下获取ViewModel > mMap = new HashMap<>(); final void put(String key, ViewModel viewModel) { ViewModel oldViewModel ViewModel viewModel = mViewModelStore.get(key); //2.判断viewModel该实例是不是我们传入的modelClass (T) viewModel; } } 当调用get()方法的时候,我们只是传递了一个ViewModel的.class对象,就会把我们ViewModel的className名字拼接上DEFAULT_KEY

    2K30发布于 2021-11-24
  • 来自专栏韩曙亮的移动开发专栏

    【Jetpack】ViewModel 架构组件 ( 视图 View 和 数据模型 Model | ViewModel 作用 | ViewModel 生命周期 | 代码示例 | 使用注意事项 )

    文章目录 一、Activity 遇到的问题 二、视图 View 和 数据模型 Model 三、ViewModel 架构组件作用 四、ViewModel 代码示例 1、ViewModel 视图模型 2 : 在 Activity 的 首次启动时 创建 ViewModel 实例对象 , 如果 Activity 多次启动 , ViewModel 只会创建一次 ; 绑定 : Activity 与 ViewModel 关联时 , 开始绑定 ViewModel , Activity 组件中 绑定 ViewModel 代码如下 ; // 获取 ViewModel myViewModel 会与 UI 组件解绑 ; 销毁 : ViewModel 关联的所有的 Activity 或 Fragment 全部销毁 , 则 ViewModel 实例对象 也会被销毁 ; 六、ViewModel 使用注意事项 ---- ViewModel 使用注意事项 : 使用 ViewModel 时 , 不要将 Context 上下文对象传入 ViewModel 中 , 否则会导致内存泄漏 ; 如果要使用 Context

    1.4K20编辑于 2023-03-30
  • 来自专栏张善友的专栏

    Silverlight + Model-View-ViewModel (MVVM)

    (Data)Model-View-ViewModel模式跟经典的Model-View-Presenter模式很相似,除了你需要一个为View量身定制的model,这个model就是ViewModelViewModel包含所有由UI特定的接口和属性,它们是轻松构建UI的必要元素。View绑定到ViewModel,然后执行一些命令在向它请求一个动作。 而反过来,ViewModel跟Model通讯,告诉它更新来响应UI。       这使得为应用构建UI非常的容易。 Model-View-ViewModel模式的博文 StackOverflow 讨论 Should I use the Model-View-ViewModel (MVVM) pattern in Silverlight Dan Crevier's DataModel-View-ViewModel pattern series 8篇介绍WPF的 sample DataModel 和 ViewModel David Wynn's

    1.6K80发布于 2018-01-30
  • 来自专栏Android 开发学习

    Android Architecture Components 之LiveData, ViewModel

    入口 阅读源码需要从源码的入口处着手,先看先官方的例子(https://developer.android.com/topic/libraries/architecture/livedata): ViewModel public <T extends ViewModel> T get(@NonNull String key, @NonNull Class<T> modelClass) { ViewModel viewModel = mViewModelStore.get(key); if (modelClass.isInstance(viewModel)) { / StatementWithEmptyBody if (viewModel ! (T) viewModel; } 作了一份内存级缓存。

    93140发布于 2018-06-06
  • 来自专栏android技术

    Jetpack--LifeCycle、ViewModel、LiveData

    Jetpack中,官方提供了ViewModel组件,我们应该继承它实现我们的ViewModel层业务 1.瞬态数据保存 例如以前我们手机屏幕旋转时,如果没有配置,那么Activity会重新创建,数据就会丢失 使用ViewModel,我们可以什么都不做就解决这个问题 现在来创建一个Activity,点击按钮让一个数字不断加一,布局文件如下: <? package com.aruba.viewmodel; import androidx.lifecycle.ViewModel; /** * Created by aruba on 2021/ 通过反射获取ViewModel,并实现点击方法 package com.aruba.viewmodel; import androidx.appcompat.app.AppCompatActivity 进度值的观察,注意这边获取ViewModel时Owner要用Activity的上下文,因为实现联动需要使用同一个ViewModel,不同Owner会生成不同的实例 package com.aruba.livedata2

    2K20编辑于 2021-12-06
领券