首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

LiveData 正确使用姿势以及反模式

因此,并不是所有场景下都适合使用 LiveData,当我们所要监听数据是符合「状态」特性,而是不是「事件」特性时候,才是最适合使用 LiveData 场景。...下面分别介绍几种常见错误使用方式: case 1:数据是「事件」类型 以「收款到账提醒举例」 class MvvmViewModel : ViewModel() { private val...:LiveData 非粘性消息探索和尝试 )可能可以满足需求,但是 LiveData 有自己特定使用场景,如果非要突破限制去使用的话,会让 LiveData 变得更让人难以理解 此处引用另一篇博客原文...case 2:有多个监听者并在其中一个 observer 修改 LiveData 不要在 observer 修改 LiveData 数据,会影响其他 observer。...name 是不可变 复制代码 这样可以有效防止在 observer 修改 LiveData 数据问题 case 3:重复添加 observer class MvvmActivity : AppCompatActivity

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

Jetpack源码解析—LiveData使用及工作原理

接下来我们看下怎样更新livedata数据值: 3.3 dispatchingValue() 我们追踪activeStateChanged方法发现,在里面做了一些活跃状态值操作,并且当状态活跃时,更新数据值...而关于postValue()在子线程更新数据相关代码,这里就不做介绍了,其实你大可以想出来,就是使用Handler。...LiveData代码很简洁,400多行代码,看起来也并不费劲,下面我们来分析下整个流程: 通过使用LiveData对象,为它创建观察者Observer 创建Observer时绑定Fragment生命周期...类,可以帮助我们实现这样场景: 通过**Transformations.map()**使用一个函数来转换存储在 LiveData对象值,并向下传递转换后值: LiveDataViewModel...Observer会以Source成员变量形式,添加到传入LiveData

98820

【译】LiveData-Flow在MVVM最佳实践

在我回答了这个关于LiveData和Flow问题后,我决定写这篇文章。在这篇文章,我将解释如何在MVVM模式中使用Flow与LiveData。...你可能会使用LiveData在这些层之间进行数据传输和转换。但LiveData主要目的是什么?它是为了进行数据转换而设计吗?...但数据层呢?我认为在数据库层使用LiveData最大问题是所有的数据转换都将在主线程上完成,除非你启动一个coroutine并在里面进行工作。...这就是为什么你可能更喜欢在数据层中使用Suspend函数。 假设你想从网络上获取天气预报数据。那么在你数据库中使用Suspend函数就会类似于下面的情况。...❝注意:如果你在资源库没有使用Flow,你可以通过使用liveData builder实现同样数据转换功能。

2.7K40

使用少量数据去除神经网络水印 -- WILD

使用少量数据去除神经网络水印 -- WILD 简介 这次介绍一篇文章, 名为Removing Backdoor-Based Watermarks in Neural Networks with Limited...针对现有的利用后门攻击在神经网络构建水印工作,该文章主要是提出了一个去除水印框架。 关于后门攻击,你可以查看我这篇文章 首先我们来看一下水印是怎么来,如下图所示 ?...WILD框架,用于去除网络水印,我们来看看框架大致情形 ?...wild-framework 如上图所示,该框架数据输入有两个部分: 干净数据,即 ? 扩增后数据,即 ? 我们可以看到,最终产生误差包括两个部分: 扩增后数据基础误差,即 ?...,一个最简单例子就是,用ImageNet进行PretrainVGG网络倒数第一层输出 实验评估 文章在三种不同类型水印上进行训练和测试, 如下图所示: ?

72730

iOSUITableViewController自带刷新控件

iOSUITableViewController自带刷新控件 一、引言         在iOS开发使用tableView界面,大多会用到一个下拉刷新控件,第三方库,我们一般会选择比较好用...MJRefresh,其实,在iOS6之后,系统为我们提供了一个原生刷新控件,使用起来非常方便,只是制定性不强,如果我们没有复杂需求,使用UIRefreshControl也是不错一个选择。...; 这个UIRefreshControl类是iOS6之后引入一个简单刷新控件,我们如果设置了它,在tableView下拉时候,系统会提供给我们一个下拉刷新效果。...三、UIRefreshControl         这个类也十分简单,通过简单设置可以展现一个小巧刷新效果,但是制定性不强,其中主要属性如下: //获取刷新状态 @property (nonatomic...需要注意是,UIRefreshControl是继承于UIControl,下拉唤醒刷新状态后,会触发UIControleEventValueChange事件,我们可以在其中进行刷新数据逻辑操作。

1.1K30

Vuex页面刷新数据丢失问题

Vuex页面刷新数据丢失问题 1、问题描述 2、解决方案:使用sessionStorage   在实际项目中,经常会遇到多个组件需要访问同一个数据情况,且都需要根据数据变化作出响应,而这些组件之间可能并不是父子组件这种简单关系...1、问题描述 Vuex用起来确实很舒服,但是今天碰到了个问题,就是我将JWT和一些权限字符串使用store保存时候,刷新页面之后这些值就没了,由于我后端集成了SpringSecurity,所以每次请求我都会去验证...如下图:   刷新页面之后: 2、解决方案:使用sessionStorage   我们将state数据保存在localStorage/sessionStorage/Cookie,这里以sessionStorage...Vuex变量是响应式,但sessionStorage不是,当我们改变Vuexstate,组件会检测到改变,但是sessionStorage不会,所以我们让Vuex状态从中sessionStorage...state 此时再刷新页面:   可以看到,数据仍然在,问题解决。

1.6K30

在Laravel实现使用AJAX动态刷新部分页面

那么今天我们一起来看一下如何在使用了PHP Frameworks网站中使用AJAX来刷新页面的一小部分。...要实现这样功能,我们基本思路如下(MVC Pattern): 使用AJAX POST call来调用Controller函数 Controller返回我们所需ViewHTML代码片段 调用AJAX...posturl我们填是laravelroute(稍后在routes我们还会叙述) callback function数据html是由controller函数中使用某个view所返回html...这样一来,当ajax call成功返回时,$(‘.tea-consumption’).append( html );就会将view生成html代码插入我们指定DOM,从而动态刷新页面。...以上这篇在Laravel实现使用AJAX动态刷新部分页面就是小编分享给大家全部内容了,希望能给大家一个参考。

11.1K31

“终于懂了“系列:Jetpack AAC完整解析(四)MVVM - Android架构探索!

仓库层 要做主要工作是判断调用方请求数据应该是从本地数据获取还是从网络数据获取,并将获取到数据返回给调用方。...本地数据源可以使用数据库、SharedPreferences等持久化技术来实现,而网络数据源则通常使用Retrofit访问服务器提供Webservice接口来实现。...实现 ViewModel 第一个想法可能是 使用Retrofit/Okhttp调用接口 来获取数据,然后将该数据设置给 LiveData 对象。...因此,如果用户在离开页面后再返回,则应用必须重新获取数据,即使数据未发生更改也是如此。这就浪费了宝贵网络资源,迫使用户等待新查询完成。...这样一来,对数据更改将触发对活跃 LiveData 对象回调。数据库会充当单一可信来源。 保留尽可能多相关数据和最新数据。这样,即使用设备处于离线模式,他们也可以使用您应用功能。

1.9K10

LiveData:还没普及就让我去世?我去你 Kotlin 协程

LiveData 是 Android 官方在 2017 年推出一系列架构组件一个,跟它一起还有 ViewModel 和 Lifecycle 等等,以及这几年陆续出现一个个新成员。...LiveData 是一个以观察者模式为核心,通过让界面对变量进行订阅来实现自动通知刷新组件,而 RxJava 最核心关键词就是观察者模式和事件流,所以当时很多人拿它去和 RxJava 做比较:有人说它比...跟一般订阅比起来,LiveData 有两个特点:一是它目标非常直接,直指界面刷新,所以它数据更新只发生在主线程;二是它借助了另一个架构组件——Lifecycle——功能,让它可以只在界面到了前台时候才通知更新...但是这里就会有一个问题:变量订阅,用 RxJava 不能做吗?为什么要搞一个新库出来呢?RxJava 就是专门做事件订阅呀? 是因为…… LiveData 数据更新发生在主线程?...Flow; LiveData 使用比较简单,而且功能上对于简单场景也是足够,而 RxJava 和 Flow 这种东西学起来就没 LiveData 那么直观。

89050

Android LiveData 使用详解

它可以做到在组件处于激活状态时候才会回调相应方法,从而刷新相应 UI。 不用担心发生内存泄漏 当 config 导致 activity 重新创建时候,不需要手动取处理数据储存和恢复。...接下来,让我们一起来看一下 LiveData 使用 ---- LiveData 使用 基本使用 引入相关依赖包 // ViewModel and LiveData implementation "...在实际使用,用得比较多是 MutableLiveData。他常常结合 ViewModel 一起使用。下面,让我们一起来看一下怎样使用它?...方法,我们注册监听网络变化广播,即ConnectivityManager.CONNECTIVITY_ACTION。...有时候,当我们数据变化时候,我们需要通知我们相应界面,刷新 UI。

4.8K40

6. Jetpack---Paging你知道怎样上拉加载吗?

Paging库中提供了三个子类来让我们在不同场景情况下使用: PageKeyedDataSource:如果后端API返回数据是分页之后,可以使用它;例如:官方DemoGitHub APISearchRespositories...val retry: () -> Unit) Listing是我们封装一个数据类,将数据源、网络状态、刷新状态、下拉刷新操作以及重试操作都封装进去了。...设置了initialLoad和netWorkState状态值,同时通过RetrofitApi获取网络数据,并在成功和失败回调数据网络状态值以及加载初始化做了相关设置,具体就不介绍了,可看代码...gankList是一个LiveData,所以我们在这里给它设置一个观察,当数据变动是调用adapter.submitList(it),刷新数据,这个方法是PagedListAdapter,里面回去检查新数据和旧数据是否相同...刷新数据 基本原理在图上我们可以很清晰了解到了,本篇文章Demo结合了ViewModel以及DataBinding进行了数据存储和绑定。

1.8K40

Paging在RecyclerView应用,有这一篇就够了

使用DataSource.Factory来获取Room数据 使用LiveData来观察PagedList 使用PagedListAdapter来与数据进行绑定与更新 2.1 DataSource.Factory...但是我们实际开发数据绝大多数来自于网络,所以DataSource与DataSource.Factory实现还是要我们自己来啃。...接下来我们通过使用最广PageKeyedDataSource来实现网络数据。 基于Databases三步,我们这里将它第一步拆分为两步,所以我们只需四步就能实现Paging对网络数据处理。...基于PageKeyedDataSource实现网络请求 实现DataSource.Factory 使用LiveData来观察PagedList 使用PagedListAdapter来与数据进行绑定与更...sendRequest返回将是NewsListingModel,它里面包含了数据列表、加载状态、刷新状态、重试与刷新请求。

1.2K20

Android Paging库使用详解(小结)

只有网络 要展示后台数据, 需要使用Retrofit同步版本, 加载信息到自定义DataSource对象....网络+数据库 在开始观测数据库之后, 你能够通过使用PagedList.BoundaryCallback来监听数据库什么时候过期. 之后, 你可能从网络拉取更多数据, 并把它们插入到数据....分页包让你直接从后台使用网络提供键加载数据. 数据量太大. 使用分页包可以将数据加载分页直到没有任何数据留下. 更方便地观测数据. 分页包能够展示应用在可观测数据结构持有的ViewModel....备注: UI也可以使用”滑动刷新”模式来触发数据非法功能. 构建自己数据源 如果你使用了自定义数据解决方案, 或者直接从网络加载数据, 你可以实现一个DataSource子类....如果你在使用分页网络API, 通常你会有用户交互, 比如”滑动刷新”, 把它作为信号去验证当前DataSource非法并请求一个新.

2K30

【Python】文件操作 ④ ( 文件操作 | 向文件写出数据 | 使用 write 函数向文件写出数据 | 使用 flush 函数刷新文件数据 )

一、向文件写出数据 1、使用 write 函数向文件写出数据 Python 通过 调用 write 函数 向文件写入数据 ; 语法如下 : write(string, file) string..., 而是暂时缓存到文件缓冲区 ; 2、使用 flush 函数刷新文件数据 write 函数写入后不会立即将内容写出到文件 , 而是暂时缓存在 文件 缓冲区 , 只有调用 flush 函数后...; flush 函数通常在需要立即将数据写入文件或流使用 , 例如在处理网络连接或者与外部设备交互时 ; 用法示例 : with open('file.txt', 'w') as f:...f.flush() # 将数据立即写入文件 上述代码在 write 函数基础上 , 调用了 flush 函数 , 刷新了文件缓冲区 ; write 和 flush 机制是为了避免频繁操作硬盘 ,...; 3、代码示例 - 使用 write / flush 函数向文件写出数据 下面的代码 , 打开一个不存在文件 , 会创建一个新文件 ; 使用 w 只写模式写入数据 , 如果文件已经存在 ,

26920
领券