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

安卓开发中Model-View-Presenter(MVP模式)

确实,在一段时间内,一个非常基础MVP已经被提出来打破 God-Object (完全负责所有的事情),而且,就在不久之前,谷歌提出MVVM,使用体系结构组件,正在被采用(ViewModel, LiveData...对于层之间通信,在经典MVP案例中,我们发现它是通过回调完成(这将最终把我们应用程序变成回调地狱),而在MVVM LiveData使用,虽然它允许我们避免回调,但它没有为我们提供大量操作符来操作数据...像这样,我们可以使用RxJava在我们服务,所以我们可以操作数据与我们所有这个库提供运营商和LiveData视图一部分,这将使我们能够使一个实现,意识到我们活动生命周期变化,甚至使用谷歌提供视图模型...改进 有许多事情可以改进,例如: ViewModel: 可以在视图和表示器之间添加一个额外层,表示器负责保存视图状态。...此外,这个视图模型可以直接将数据绑定注入到XML中,并使用LiveData将可视化组件绑定到LiveData可观察对象。

1.6K30

Android Jetpack - LiveData

等),此感知能力确保了 LiveData 只更新处于生命周期活跃状态组件观察者 生命周期活跃状态定义是这些组件正处于 STARTED 或 RESUMED 状态LiveData 只会更新活跃状态观察者...LiveData 自动管理所有这些,因为它在观察时意识到相关生命周期状态变化 始终保持数据最新 如果生命周期变为非活动状态,它将在再次变为活动状态时接收最新数据。...例如,后台活动在返回前台后立即接收最新数据 配置更改友好 如果由于配置更改(例如设备轮换)而重新创建活动或片段,则会立即接收最新可用数据 资源共享 你可以使用单例模式扩展 LiveData 对象以包装系统服务...LiveData 对象连接到系统服务一次,然后任何需要该资源观察者都可以只观看 LiveData 对象 使用 LiveData 使用 LiveData 常规步骤如下,我们按照下面这些步骤写一个简单例子...与 Room 一起使用 LiveData Room 持久化库支持可观察查询并返回 LiveData 对象,这些查询一般在 DAO 中编写 在更新数据库时,Room 会生成更新 LiveData 对象所需所有代码

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

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

LiveData、进行了分析,也对JetPack有了更深入了解。...背景 在我Jetpack_Note系列中,对每一篇分析都有相对应代码片段使用,我把它做成了一个APP,目前功能还不完善,代码我也上传到了GitHub上,参考了官方Demo以及目前网上一些文章...val retry: () -> Unit) Listing是我们封装一个数据类,将数据源、网络状态、刷新状态、下拉刷新操作以及重试操作都封装进去了。...中设置了initialLoad和netWorkState状态值,同时通过RetrofitApi获取网络数据,并在成功和失败回调中对数据和网络状态值以及加载初始化做了相关设置,具体就不介绍了,可看代码...刷新数据 基本原理在图上我们可以很清晰了解到了,本篇文章Demo中结合了ViewModel以及DataBinding进行了数据存储和绑定。

1.8K40

Android Lifecycle框架介绍

我们在应用中有使用地图跟踪用户地理位置,地理位置更新在一个listener里。...要解决这个问题,我们首先来看看android.arch.lifecycle包中为我们提供了哪些弹药: Lifecycle类 Lifecycle类持有组件可监听生命周期状态,通过Event和State...两个枚举来体现关联生命周期状态。...LiveData 假设你应用需要应用在前台时候在地图上更新精细坐标,而程序进入后台只需要更新大致位置(频率、精度不高位置),那么使用LiveData可以在位置变化时候自动更新UI 假设你在开发一款在线播放视频应用...3、@OnLifecycleEvent 可以在继承了LifecycleObserverListener中方法中通过注解方式告诉Listner在哪个Event状态时去执行某个方法。

89610

Android从零开始搭建MVVM架构(4)——LiveData

LiveData对象一旦连接到系统服务,任何需要该资源Observer都只需观察这个LiveData对象。 如何使用LiveData? 1.创建一个LiveData实例来保存特定类型数据。...2.创建一个定义了onChanged()方法Observer对象,当LiveData对象保存数据发生变化时,onChanged()方法可以进行相应处理。...LiveData允许UI控制器Observer订阅更新。 当LiveData对象所保存数据发生变化时,UI会在响应中自动更新。...这些UI控制器负责显示数据而不是保存数据状态。 将LiveData实例与特定Activity或Fragment实例分离,这将使得LiveData对象在配置更改后仍然存活。...要实现自己转换,您可以使用MediatorLiveData类,该类监听其他LiveData对象并处理它们发出事件。 MediatorLiveData将其状态正确地传播到源LiveData对象。

2.2K30

eBPF 入门开发实践教程六:捕获进程发送信号系统调用集合,使用 hash map 保存状态

本文是 eBPF 入门开发实践教程第六篇,主要介绍如何实现一个 eBPF 工具,捕获进程发送信号系统调用集合,使用 hash map 保存状态。...在探针函数中,我们使用 bpf_map 存储捕获事件信息,包括发送信号进程 ID、接收信号进程 ID、信号值和进程可执行文件名称。...在系统调用退出时,我们将获取存储在 bpf_map 中事件信息,并使用 bpf_printk 打印进程 ID、进程名称、发送信号和系统调用返回值。...最后,我们还需要使用 SEC 宏来定义探针,并指定要捕获系统调用名称,以及要执行探针函数。...,使用 hash map 保存状态

29430

Android程序员该如何去手写事件通信方案LiveDataBus

3.当Activity停止时不会引起崩溃 这是因为组件处于非激活状态时,不会收到LiveData中数据变化通知。...4.不需要额外手动处理来响应生命周期变化 这一点同样是因为LiveData能够感知组件生命周期,所以就完全不需要在代码中告诉LiveData组件生命周期状态。...当我们采用LiveData保存数据时,因为数据和组件分离了。当组件被recreate,数据还是存在LiveData中,并不会被销毁。...LiveData有几种使用方式: 使用LiveData对象 继承LiveData使用LiveData对象 使用LiveData对象主要有以下几个步骤: 创建保存特定数据类型LiveData实例...在LiveData中,onActive方法回调表明当前Activity处于激活状态,也就是Activity处于生命周期活动状态中(onStart,onResume),可以简单认为当前Activity

1.3K10

LiveData精通指南:解锁其潜力

在ViewModel中使用LiveData 我们可以在ViewModel中使用LiveData来管理数据状态。...例如,我们可以使用ViewModel中LiveData对象来保存数据: public class MyViewModel extends ViewModel { private MutableLiveData... getName() { return nameLiveData; } } 在这个示例中,我们使用ViewModel中LiveData对象来保存数据,并且在LiveData...ViewModel可以帮助我们实现数据状态管理,避免了数据在不同Activity或Fragment之间传递。 LiveData原理 LiveData原理非常简单。...解决方法是在活动状态下观察LiveData对象,或使用Lifecycle组件来管理LiveData对象生命周期。 数据更新不及时:当LiveData对象发生更改时,观察者没有及时接收到更新。

17010

eBPF 入门开发实践指南六:捕获进程发送信号系统调用集合,使用 hash map 保存状态

本文是 eBPF 入门开发实践指南第六篇,主要介绍如何实现一个 eBPF 工具,捕获进程发送信号系统调用集合,使用 hash map 保存状态。...在探针函数中,我们使用 bpf_map 存储捕获事件信息,包括发送信号进程 ID、接收信号进程 ID、信号值和系统调用返回值。...在系统调用退出时,我们将获取存储在 bpf_map 中事件信息,并使用 bpf_printk 打印进程 ID、进程名称、发送信号和系统调用返回值。...最后,我们还需要使用 SEC 宏来定义探针,并指定要捕获系统调用名称,以及要执行探针函数。...,使用 hash map 保存状态

35310

LiveData优势

这种感知能力可确保LiveData 仅更新处于活跃生命周期状态应用组件观察者。 应用组件观察者可以很安全观察数据变化(绑定声明周期,自动绑定和移除),不用担心内存泄漏等问题。...该组件优势: 确保界面符合数据状态 LiveData 遵循观察者模式。...数据始终保持最新状态 如果生命周期变为非活跃状态,它会在再次变为活跃状态时接收最新数据。...如果看源码会发现Observe有一个version版本号,而LiveData也有一个版本号是否调用观察者通知数据变化就是比对这两个版本号是否一致,ViewModel会保存LiveData实例,当重建时LiveData...ViewModel) 共享资源 可以使用单例模式扩展 [LiveData] 对象以封装系统服务,以便在应用中共享它们。

1.2K20

【译】LiveData三连

❞ 关于这个LiveData新概念是,它具有生命周期意识,这意味着它尊重应用程序组件(Activity、Fragment)生命周期状态,并确保LiveData只在组件(观察者)处于活跃生命周期状态时更新它...Scenario 为了用代码片段进行演示,我们想象一下,构建一个社交网络应用中界面UI,它显示了一个用户简介以及该用户关注者数量。...这意味着我们可以将LiveData对象保存到数据库中,之后再将其作为普通LiveData进行观察。这让我们可以在代码中一个地方保存数据,并让另一个地方代码,观察它数据改变。...如果你不把数据传播到用户界面,那么使用生命周期感知组件就没有意义了。LiveData主要目的是在组件生命周期中保持数据状态。...使用LiveData所有优点在某种程度上都与LiveData生命周期意识有关。它允许你通过配置变化来持久化UI状态

1.6K20

LiveData 迁移到 Kotlin 数据流

接下来我们一起比较 LiveData 和 Kotlin 数据流中相对应写法吧: #1: 使用可变数据存储器暴露一次性操作结果 这是一个经典操作模式,其中您会使用协程结果来改变状态容器: △ 将一次性操作结果暴露给可变数据容器...它永远只会把最新值重现给订阅者,这与活跃观察者数量是无关。 当暴露 UI 状态给视图时,应该使用 StateFlow。这是一种安全和高效观察者,专门用于容纳 UI 状态。...#2: 把一次性操作结果暴露出来 这个例子与上面代码片段效果一致,只是这里暴露协程调用结果而无需使用可变属性。...如果使用 LiveData,我们需要使用 LiveData 协程构建器: △ 把一次性操作结果暴露出来 (LiveData) class MyViewModel(...) : ViewModel()...状态初始值 当使用 [SharingStarted.WhileSubscribed] 并带有 `replayExpirationMillis` 参数重置状态流时,也会用到 initialValue

1.3K20

响应式编程|Kotlin与LiveData扩展函数实践技巧

那么可以想见,我们需要花额外精力去构建和维护一个b和a关系。 而响应式编程想法正是企图用某种操作符帮助你构建这种关系。 它思想完全可以用下面的代码片段来表达: ?...数据源Data经过一系列变化,直接达到最终在View层展示状态。例如从远程获取数据fetch方法可以理解为改变数据源一个“水坝”。...在我们重构过程中,大量使用LiveData Extensions,极大地减少了代码量,提升了我们工作效率。...可以看到,在使用LiveData Extensions之后,我们代码复杂度得到了明显改善。 ---- 6. 局限性 LiveData Extensions在处理页面交互任务时,表现极为出色。...另外,我们更主张使用多个LiveData联合触发而非特别长链式表达,如果确实需要特别长链式表达,尤其是需要反复切换线程情况,我们建议使用RxJava。

1.6K10

Android | LiveData 源码分析

了解 LiveData 如果观察者(Activity/Fragment) 生命周期处于 STARTED 或者 RESUMED 状态LiveData 就会认为是活跃状态。...有了这关系,当 Lifecycle 对象状态为 DESTORYED 时,便可以移除这个观察者。 使用 LIveData 具有以下优势: 确保界面符合数据状态:数据发生变化时,就会通知观察者。...,它会在变为活跃状态时接收最新数据 配置更改后也会接收到最新可用数据 共享资源,可以使用单例模式扩展 LiveData 对象,以便在应用中共享他们 LiveData 使用 LiveData 是一种可用于任何数据封装容器...如果观察者生命周期处于 STARTED 或者 RESUMED 状态LiveData 就会认为观察者处于活跃状态,我们可以通过重写 LiveData 来判断当前是否为活跃状态 class StockLiveData...转换 LiveData Transformations.map() 在数据分发给观察者之前对其中存储值进行更改,返回一个新 LiveData,可以使用此方法 private val _state

93720

由浅入深,详解 LiveData 那些事

相应,关于 LiveData 解析与使用文章更是数不胜数,其中不乏优秀创作者,在众多文章以及前辈面前,本篇也不敢妄谈能写多么深入,易懂。...setValue() 更新数据时,通知用户变更,我们需要新增一个观察者列表map,从而将用户 observe() 传递进来观察者保存起来; 为了符合Android生命周期,保证页面活跃状态才能收到通知...ObserverLifecycleWrapper ,其需要实现 LifecycleEvent 接口,以及内部保存着我们观察者; 最后,当用户在调用 observe() 订阅数据更新时,我们就将用户传递观察者使用包装类包装起来...对于开发者而言,因为两者使用起来共性何其相似,特别是作用于共享页面时,开发者很容易会想到二选一问题,但事实上,仔细分析的话,就会发现: 对于LiveData,这属于共享页面的数据状态同步; 对于...但如果你想做更多事,比如想在发送数据时顺便处理一下,从而更自动完成数据状态处理,Flow 也许更加符合你要求,当然你也可以随时将 Flow 转为传统 LiveData 使用(对外部调用者而言)。

1.2K20

ViewModels and LiveData- Patterns + AntiPatterns

在ViewModels和View之间进行通信推荐方式是观察者模式,使用LiveData或来自其他库观察变量方式。...参见我们样本中资源类:https://developer.android.com/jetpack/guide#addendum。 ✅使用包装器或另一个LiveData暴露你数据状态信息。...旋转是最常见情况,我们已经用ViewModels覆盖了这种情况。所以,状态保存在ViewModel中是安全。...为了有效地保存和恢复UI状态,可以使用持久性、onSaveInstanceState()和ViewModels组合。 对于一个例子,请看。...✅考虑边缘情况、泄漏以及长期运行操作会如何影响你架构中实例。 ❌ 不要在ViewModel中放置对保存清洁状态或与数据有关逻辑。你从ViewModel进行任何调用都可能是最后一次。

1.1K30

LiveData详细分析

目录介绍 01.LiveData是什么东西 02.使用LiveData优势 03.使用LiveData步骤 04.简单使用LiveData 05.observe()和observerForever(...自动解除数据订阅 要想使用LiveData(或者这种有可被观察数据能力类)就必须配合实现了LifecycleOwner对象使用。在这种情况下,当对应生命周期对象DESTORY时,才能移除观察者。...如果横竖屏切换(configuration change)时,不需要额外处理来保存数据,当屏幕方向变化时,组件会被recreate,然而系统并不能保证你数据能够被恢复。...当我们采用LiveData保存数据时,因为数据和组件分离了。当组件被recreate,数据还是存在LiveData中,并不会被销毁。...04.简单使用LiveData 4.1 单独使用LiveData 举一个最简单案例代码:liveData = new MutableLiveData(); liveData.observe(this

2.8K00

Android技术栈(四)Android Jetpack MVVM 完全实践

调用前,会变成该状态,变成此状态后将不会再出现任何状态改变,也不会发送任何生命周期事件 INITIALIZED,构造函数执行完成后但onCreate未执行时为此状态,是最开始时状态 CREATED,在...#getValue来直接获取内部保存值(非线程安全) //LiveData 一般是用来给ViewModel保存数据 public class MyViewModel extends ViewModel.../Fragment被重建也能重新接收到LiveData保存数据 //在组件DESTROYED时,LiveData会把它移出观察者列表 //当然你也可以不关联LifecycleOwner,让订阅一直保持...LiveData转换为另一种LiveData.他有类似于RxJava使用方式....protected void onCleared() { } } 简直一目了然,我们可以在ViewModel上使用LiveData作为字段保存数据,并编写业务逻辑(数据处理逻辑).就像这样 public

3.7K01
领券