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

LiveData 还有学习的必要吗?—— Jetpack 系列(2)

存储的数据,这在有些情况下不符合预期(具体见第 TODO 节); 3、LiveData 不防抖问题: 重复 setValue 相同的值,订阅者会收到多次 onChanged() 回调(可以使用 distinctUntilChanged...内部通过一个原子标志位来标记事件是否已经消费过。...---- 参考资料 LiveData 概览[12] —— 官方文档 重学:吃透 LiveData 本质,享用可靠消息鉴权机制[13] —— KunMinX 著 重学LiveData 数据倒灌...[12] LiveData 概览: https://developer.android.google.cn/topic/libraries/architecture/livedata [13] 重学...:吃透 LiveData 本质,享用可靠消息鉴权机制: https://xiaozhuanlan.com/topic/6017825943 [14] 重学LiveData 数据倒灌 “背景缘由全貌

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

曝已遭利用的新0day,影响多数设备

谷歌发现一个未修复的0day已遭利用。该0day存在于操作系统的内核代码中,可被攻击者用于获取设备的根权限。...颇具讽刺意味的是,这个0day曾在2017年12月于内核版本3.18、4.14、4.4和4.9中修复,但新版本指易受攻击。 ?...受影响设备 谷歌研究人员认为该漏洞影响如下运行8.x及后续版本的手机型号。...该公司长久以来指责向专制政权出售黑客工具,不过最近由于遭受的批评增多,该公司承诺会和滥用黑客工具监控无辜人员或反对党派人士的客户作斗争。 该公司否认了这个0day出自他们之手。...团队表示,“我们已将问题告知合作伙伴,补丁已存在于通用内核(Common Kernel)中。Pixel 3和3a设备并不受影响,Pixel 1和2设备将在十月更新中收到更新。”

1.2K00

【AAC 系列三】深入理解架构组件:LiveData

注意:LiveData 对同时多次修改数据做了处理,如果同时多次修改,只会修改为最新的数据。 3. 图解 LiveData 3.1 LiveData 类图 再看一遍类图,回顾一下: ?...4.1 Sticky Event LiveData 订阅时,如果之前已经更改过数据,并且当前 owner 为 active 的状态,activeStateChanged() 会被调用,也即会立马通知到...这时候需要使用 AlwaysActiveObserver ,改调用 observe 方法为调用 LiveData.observeForever(Observer) 方法即可。...也是,所以 LiveData 可以用来做成 LiveDataBus,有兴趣可以搜索。...setValue 只不过把操作放到主线程,适合在异步线程里调用,setValue 必须在主线程里调用; 如果同时多次调用 postValue 或 setValue 修改数据,只会修改成最新的那个数据,

88920

LiveData详细分析

当我们采用LiveData保存数据时,因为数据和组件分离了。当组件recreate,数据还是存在LiveData中,并不会被销毁。...通过 observe()方法连接观察者和LiveDataobserve()方法需要携带一个LifecycleOwner类。这样就可以让观察者订阅LiveData中的数据,实现实时更新。...目前在组件的onCreate()方法中开始观察数据,代码如下所示: 思考下,可以在onResume()中调用么,个人觉得不太好。因为系统会多次调用onResume()方法。...调用 observe() 注册后,由于绑定了 owner,所以在 active 的情况下,使用LiveData中setValue发送数据,则 Observer 会立马接受到该数据修改的通知。...LiveData 对同时多次修改数据做了处理,如果同时多次修改,只会修改为最新的数据。

2.8K00

恶意软件检测:系统调用日志+机器学习算法

基于签名的静态检测技术广泛应用于平台的恶意应用检测。该方法主要是提取签名数据并与病毒等恶意软件样本的签名进行比对,这种方法不能检测出未知的恶意应用。...研究人员提出一种新的基于系统调用日志+机器学习算法的方法进行恶意软件检测。 背景 恶意软件的分类主要有:病毒、蠕虫、木马、广告软件、犯罪软件、攻击工具等。...恶意软件检测 因为本身加入了一些新的特性,加上手机本身的一些限制,用传统方法进行手机恶意软件检测很难保证成功率和效率。 研究人员提出一种使用系统调用日志进行恶意软件检测的方法。...研究人员手机了66个应用的系统调用个日志信息,生成的系统调用日志数据集中记录了每个应用的19个特征。多特征融合能增加检测的精确度。...系统生成系统调用日志的命令是strace,Python脚本的运行流程图为: 应用卡方 (Chi-square)过滤算法 用每个应用的系统调用日志创建数据集,数据集包含系统调用信息,有没有系统调用有1/

2.2K50

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

后,在外getAge获取不到值,因为回调没有触发, // 如果name写了postValue(this),更新了name也会连着age更新,因为传的是this } 你也可以集成LiveData...  2.如果在主线程执行发布的任务之前多次调用此方法,则仅将分配最后一个值。   ...setValue()   setValue()的特性如下:   1.此方法只能在主线程里调用 getValue()   返回当前值。 注意,在后台线程上调用此方法并不能保证将接收到最新的值。...observe(@NonNull LifecycleOwner owner, @NonNull Observer<?...您需要手动调用removeObserver(Observer)以停止观察此LiveData,   2.设置后此LiveData,一直处于活动状态,不管是否在前台哪里都会获得回调。

1.5K20

Android Jetpack架构组件(四)之LiveData

使用 LiveData 保存数据时,由于数据和组件是分离的,所以当组件销毁时可以保证数据不会丢失。...因此,我们认为LiveData就是一个数据容器,它负责将数据包裹起来,使数据成为观察者,当数据发生变化时,LiveData会通知观察者以便观察者做出响应。...(this, nameObserver); } } 当我们传递 nameObserver 参数的情况下调用 observe() 后,系统会立即调用 onChanged(),从而提供 mCurrentName...LiveData生命周期变化观察 前面介绍LiveData用法的时候提到,首先,我们创建 LiveData 实例,然后调用LiveDataobserve方法来注册观察者,将ViewModel和LiveData...如果判断条件都满足就继续调用Observer的onChanged方法,这个方法正是使用LiveDataobserve方法的回调。

2.8K00

如何拉起一键清除的进程

后来发现到大部分人都经常清理内存(如使用360手机卫士等软件的一键关闭进程),一旦应用清理就必须再次打开才能收到朋友的消息。...凡是使用个推的APP推送链路会共享,程序一键杀掉后能通过用户自动打开高频应用从而使其他APP推送链路畅通。这不仅实现了各个应用之间的互相看护,还大大减少了应用对手机电量以及流量的消耗。...而这项多通道合并技术,顾名思义,是将这些通道合并在了一起,形成了一注更大的水流,即便有个别支流强制关闭,只要留存的应用中有其他接入个推的应用,整条通道依然能导通。...通过SDK内部进程间的通信机制,关闭的部分可以重新打开,实现了应用相互带动的良好关系,我的应用也是通过这个方式得到了同学们又一次的关注。 具体过程相信大家看了下面的图就会明白: ?  ...新版SDK默认开启看护以及看护功能,若需退出看护联盟,应该可以联系个推的技术支持来解决。

1.5K100

事件总线方案实践

- 2.多次调用了 postValue() 方法,只有最后次调用的值会得到更新。也就是此方法是有可能会丢失事件!...#### 7.2 然后看一下第二个问题 - 首先看一下postValue源代码,如下所示: - 看代码注释中说,如果在多线程中同一个时刻,多次调用了 postValue() 方法,只有最后次调用的值会得到更新...因此,在调用observe的时候,我们可以通过反射拿到LifecycleBoundObserver,再把LifecycleBoundObserver的version设置成和LiveData一致即可。...这个调用类似于{@link LiveData#observe(LifecycleOwner, Observer)} 和一个LifecycleOwner, which总是积极的。...这意味着给定的观察者将接收所有事件,并且永远不会 自动删除。 您应该手动调用{@link #removeObserver(Observer)}来停止 观察这LiveData

1.8K30

Jetpack--LifeCycle、ViewModel、LiveData

Jetpack是google官方的开发工具集,目的是为了标准化和加快开发效率,并且之后会持续更新 开发中,google推荐使用MVVM架构,Jetpack集成了构建MVVM架构的几种工具,相比于以前的...可以说你的项目没有升级使用这套架构,那么你的架构就已经过时了 JetPack与AndroidX AndroidX命名空间中包含Jetpack库 AndroidX代替Android Support Library...,onDestroy不会调用 Lifecycle可以使我们不必在原来组件的生命周期中进行管理,降低了模块的耦合度,一定程度上避免了没有及时销毁资源的情况,降低了内存泄漏的发生 二、ViewModel Jetpack...,需要结合LiveData使用,ViewModel的生命周期是独立于Activity的 三、LiveData LiveData对象提供了可观测方法,当数据发送改变时,观测方能够观测到,并且线程安全,集成了...CountViewModel.class); countTextView = findViewById(R.id.countTextView); countViewModel.getCount().observe

1.6K20

开发以太坊钱包系列3 - 资产信息展示

这是如何开发以太坊()钱包系列第3篇, 钱包账号资产信息展示,展示信息主要包括账号地址、eth余额及该账号所拥有的Token及余额。...或Fragment使用,当界面系统销毁时,ViewModel也会进行资源清理,避免内存泄漏。...LiveData会将观察者视为活动状态,并通知其数据的变化。LiveData未注册的观察对象以及非活动观察者是不会收到有关更新的通知。...null; } 上面代码先用 ETHWalletDao.loadAll 加载出所有的账号,返回当前选中的,上面的代码会被FetchWalletInteract 类的 findDefault方法调用...之后,在UI界面PropertyFragment.java 中, 就可以对 defaultWallet 进行订阅: tokensViewModel.defaultWallet().observe(this

1.3K30

Android livedata 源码解剖

我们先来回顾一下 LiveData 的特点: LiveData 是一个可以观察的数据持有类,它可以感知 Activity、Fragment或Service 等组件的生命周期。...方法,首先通过 owner.getLifecycle().getCurrentState() 获取状态,判断是否已经销毁,如果已经销毁,直接返回。...observe 方法,小结起来就是 判断是否已经销毁,如果销毁,直接移除 用 LifecycleBoundObserver 包装传递进来的 observer 是否已经添加过,添加过,直接返回 将包装后的...所以会回调 obsever 的 onChange 方法,这也就是 LiveData 设计得比较巧妙的一个地方 同理,当 activity 处于后台的时候,您多次调用 livedata 的 setValue...因为我们的 obsever remove 掉是依赖于 Activity 生命周期变化的时候,回调 GenericLifecycleObserver 的 onStateChange 方法。

95220

LiveData三问—阿里真题

今天继续MVVM旅程,一起看看LiveData的有关问题: LiveData 是什么? LiveData 为什么设计出来,解决了什么问题? 说说LiveData原理。 LiveData 是什么?...主要思想就是用到了观察者模式思想,让观察者和观察者解耦,同时还能感知到数据的变化,所以一般用到ViewModel中,ViewModel负责触发数据的更新,更新会通知到LiveData,然后LiveData...var liveData = MutableLiveData() liveData.observe(this, object : Observer {...("test") LiveData 为什么设计出来,解决了什么问题?...说说LiveData原理。 说到原理,其实就是两个方法: 订阅方法,也就是observe方法。通过该方法把订阅者和观察者关联起来,形成观察者模式。

47930

Android Jetpack - LiveData

: 1、创建持有任意类型的 LiveData 实例,这一步通常在 ViewModel 中完成 2、创建一个 Observer 对象并重写其 onChanged() 方法,该方法会在 LiveData 数据更改时回调并返回最新数据...在这种情况下,观察者认为始终处于活动状态,因此始终会收到有关修改的通知。...对象 在大多数情况下,从 app 组件的 onCreate() 方法是开始观察 LiveData 对象最合适,原因如下: onResume() 可能多次调用,造成 Observer 重复注册 确保...,传递 lifecycleOwner 和 nameObserver viewModel.name.observe(this, nameObserver) } } nameObserver...作为 observe() 的参数注册之后,一旦 name 发生变动且 MainActivity 处于活跃状态,onChanged() 方法就会被立即调用,然后 UI 会被更新 ?

2K30
领券