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

ViewModel浅析

> <RelativeLayout xmlns:android="http://schemas.android.com/<em>apk</em>/res/android" android:layout_width...> <RelativeLayout xmlns:android="http://schemas.android.com/<em>apk</em>/res/android" android:layout_width...ViewModelProvider(activity.getViewModelStore(), factory); } 当factory为null,会根据application创建一个factory,这样保证了一个应用使用的是同一个...SharedViewModel.class)的get先是跳到ViewModelProvider的get方法,然后果不其然跳到了ViewModelStore的get方法 接下来我们来看是怎么触发数据变化的,先看接收方...ViewModel基本都会跟LiveData结合使用,LiveData里面有个ObserverWrapper类,监听就是通过它实现 其实代码功能底层基本都是通过存储来实现的,无论是线程间通信还是进程间通信

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

【Jetpack】LiveData 架构组件 ( LiveData 简介 | LiveData 使用方法 | ViewModel + LiveData 示例 )

这里引入 LiveData 架构组件 , ViewModel 中 , 可以 通过 LiveData 将数据修改的信息发送给 视图 View , 通知 UI 界面进行修改 ; 场景举例 : ViewModel...中申请 HTTP 服务器数据 , 请求发送后 , 不知道什么时候才能获得响应 , 如果 过一段时间服务器才反馈响应数据 , 此时只能 通过 LiveData 将 ViewModel 的数据修改通知给...Handler 或者 广播 等形式 , 子线程中通知主线程更新 UI ; 使用 LiveData 后 , 将数据定义 LiveData 中 , 然后 Activity 中 为 LiveData 添加...Activity 系统组件中 , 绑定 ViewModel , ViewModel 中获取 LiveData 显示到 UI 界面中 , 并为该 LiveData 设置 Observer 监听器 ,.../android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com

1.2K20

Android面试题集

有序广播:调用sendOrderedBroadcast(),发出去的广播会被广播接受者按照顺序接收,广播接收者按照Priority属性值大-小排序,Priority属性相同者,动态注册的广播优先,广播接收者还可以...了解APK的安装流程吗,描述一下? APK的安装流程如下所示: ? 复制APK到/data/app目录下,解压并扫描安装包。 资源管理器解析APK里的资源文件。...因此,主要作为进程间以及同一进程内不同线程之间的同步手段。6....本质上来讲启动启动时创建的进程就是主线程,线程和进程处理是否共享资源外,没有其他的区别,对于Linux来说,它们都只是一个struct结构体。 Activity的通信方式有哪些?...尽管服务进程与用户所见内容没有直接关联,但是它们通常在执行一些用户关 心的操作(例如,在后台播放音乐或网络下载数据)。

81010

知识点 | ViewModel 四种集成方式

下面的文章中,我将介绍 ViewModel 的四种集成方式: ViewModel 中的 Saved State —— 后台进程重启时,ViewModel 的数据恢复; NavGraph 中使用 ViewModel...Activity 和 Fragment 通常会在下面三种情况下被销毁: 当前界面永久离开: 用户导航至其他界面或直接关闭 Activity (通过点击返回按钮或执行的操作调用了 finish() 方法...SavedStateHandle 和 Bundle 一样,以键值对形式存储数据,它包含在 ViewModel 中,并且可以应用处于后台时进程被杀死的情况下幸存下来。...Activity 应用,它包含了八个 Fragment,其中四个 Fragment 是购买支付流程: △ 包含一些购买支付流程的导航图 (Navigation Graph) 这四个页面需要共享一些诸如收货地址、是否使用了优惠券等信息.../apk/res/android"> <variable name="viewmodel" type="com.android.MyViewModel"/> <...

2.5K20

Android APK 签名原理

将原始信息和数字签名一并发给接收者。 接收收到信息后通过如下两步验证消息来源的真伪。 使用公钥对数字签名进行解密,得到消息的摘要,由此可以确定信息是又发送者发来的。...发送者签名的时候,带上数字证书发送给接收者。接收者用 CA 的公钥解开数字证书,就可以拿到发送者真实的公钥了,然后就能证明"数字签名"是否来源真实。...Android APK 签名流程 为了防止 APK 传送的过程中被第三方篡改,Google 引入了签名机制。...该块有一个 “Name” 属性,其值就是该文件 APK 包中的路径。...2、APK 作者身份唯一性校验 当在 Android 设备上安装 APK 包时,会存放在 CERT.RSA 中的公钥证书中提取公钥,进行 RSA 解密来校验安装包的身份。

3.3K30

ViewModel 和 LiveData:为设计模式打 Call 还是唱反调?

; 显然,Activity 接收到这个值后会显示出来一个 SnackBar。 但是,如果用户旋转手机,则新的 Activity 被创建并开始观察这个字段。...如果数据仓库是个单例或者是和 Application 的生命周期绑定的,这个数据仓库进程被杀掉之前都不会被销毁。...如果你需要更多功能,扩展 LiveData 会让你知道什么时候有活跃的观察者。例如,当想要开始监听位置或传感器服务时,这将很有用。...使用 onActive() 来启动加载数据的服务是可以的,但是如果你没有一个很好的理由这样做的话就不要这样做,没有必要非得等到 LiveData 开始被观察才加载数据。...[^是否需要关于 Architecture Component 的其他任何主题的指导(或意见)?留下评论!]

3K30

Jetpack之LiveData详解

简介 LiveData 是Jetpack中的一个组件,是一个可被观察的数据存储器类, 具有感知组件生命周期的能力,LiveData 可以感知组件生命周期活跃状态发送数据更新,组件销毁时移除观察者对象,...主要有如下两个作用: 实时刷新数据 防止内存泄漏 LiveData 采用的是观察者模式,当 LiveData 保存的数据发生变化时就会通知观察者,观察者接收到通知后可以进行 UI 数据刷新或者其他操作。...LiveData 里的数据 public boolean hasActiveObservers() : 是否存在活跃的观察者对象 public boolean hasObservers() :是否有观察者对象...> <layout xmlns:android="http://schemas.android.com/<em>apk</em>/res/android" xmlns:app="http://schemas.android.com...= null) { return; } owner.getLifecycle().addObserver(wrapper); } 首先检查是否主线程,然后检查生命周期状态

1.6K20

知识点 | ViewModel 四种集成方式

下面的文章中,我将介绍 ViewModel 的四种集成方式: ViewModel 中的 Saved State —— 后台进程重启时,ViewModel 的数据恢复; NavGraph 中使用 ViewModel...Activity 和 Fragment 通常会在下面三种情况下被销毁: 当前界面永久离开: 用户导航至其他界面或直接关闭 Activity (通过点击返回按钮或执行的操作调用了 finish() 方法...SavedStateHandle 和 Bundle 一样,以键值对形式存储数据,它包含在 ViewModel 中,并且可以应用处于后台时进程被杀死的情况下幸存下来。...Activity 应用,它包含了八个 Fragment,其中四个 Fragment 是购买支付流程: △ 包含一些购买支付流程的导航图 (Navigation Graph) 这四个页面需要共享一些诸如收货地址、是否使用了优惠券等信息.../apk/res/android"> <variable name="viewmodel" type="com.android.MyViewModel"/> <...

21320

深入理解Activity启动流程和AMS框架(一)

APK文件和我们常见可执行文件的区别是:每个可执行文件一个单独的进程中,但是APK文件可能运行在一个单独的进程也可能和其他APK文件运行在同一进程中。...此时的Activity虽然已经不能接收用户的输入,但还是可见的。>>onPause() 停止态 :当一个Activity完全被另外一个Activity覆盖,不能接收用户输入也不可见。...三、应用进程的组成 Android建立Linux系统之上,基础的运行环境还是由进程组成。...(比如,通过属性process设置相同的应用名称后,两个有着相同ShareUserId和签名的应用可以合并在同一进程运行) ActivityThread 管理应用进程的主线程的执行(相当于普通Java...we declare it 'bad' Slog.wtf(TAG, "Exception thrown dispatching broadcasts in " + app

1.8K20

ViewModels and LiveData- Patterns + AntiPatterns

你可以ViewModel中暴露出一个LiveData。例如,MyDataState可以包含关于数据是否正在加载、是否已经成功加载或失败的信息。...Saving activity state Activity状态是你一个Activity消失时重新创建屏幕所需要的信息,这意味着该Activity被破坏或进程被杀死。...Extending LiveData LiveData最常见的用例是ViewModels中使用MutableLiveData,并将它们作为LiveData公开,使它们观察者那里不可改变。...如果你需要更多的功能,扩展LiveData会让你知道什么时候有活跃的观察者。例如,当你想开始监听一个位置或传感器服务时,这很有用。...你也可以使用onActive()来启动一些加载数据的服务,但除非你有很好的理由,否则你不需要等待LiveData的观察。

1.1K30

Android 架构组件 - 让天下没有难做的 App

一个 App 全局来看,可以划分为三部分:首先是 UI Controller 层,包含 Activity 和 Fragment;其次是 ViewModel 层,既可以做 MVVM 的 VM、MVP 的...虽然 Realm 也是一个优秀的数据库,但是它并没有内置于 Android 系统,所会增大 apk 的体积,使用 Room 则没有这方面烦恼。...,甚至可以指定目标页面是否也需要出栈: ?...针对页面节点,还可以定义它要接收的参数(arguments),支持默认值,从此 Fragment 之间的参数传递变得非常直观,非常安全。...上图表达了数据的流向,如果 UI 层往回看,页面展示的数据存储 PagedList 中,PagedList 只是 DataSource 的数据块(chunk),当 PagedList 需要更多数据时

1.2K20

livedatabus详解,阿里是如何用他来做淘宝架构的?

一个 App 全局来看,可以划分为三部分:首先是 UI Controller 层,包含 Activity 和 Fragment;其次是 ViewModel 层,既可以做 MVVM 的 VM、MVP 的...虽然 Realm 也是一个优秀的数据库,但是它并没有内置于 Android 系统,所会增大 apk 的体积,使用 Room 则没有这方面烦恼。...,甚至可以指定目标页面是否也需要出栈: ?...针对页面节点,还可以定义它要接收的参数(arguments),支持默认值,从此 Fragment 之间的参数传递变得非常直观,非常安全。...上图表达了数据的流向,如果 UI 层往回看,页面展示的数据存储 PagedList 中,PagedList 只是 DataSource 的数据块(chunk),当 PagedList 需要更多数据时

1.1K30

Android消息总线的演进之路:用LiveDataBus替代RxBus、EventBus

来创建一个Subject对象(PublishSubject只有被订阅后才会把接收到的事件立刻发送给订阅者),需要接收事件的地方,订阅该Subject对象,之后如果Subject对象接收到事件,则会发射给该订阅者...完成了订阅,需要发送事件的地方将事件发送给之前被订阅的Subject对象,则此时Subject对象作为订阅者接收事件,然后会立刻将事件转发给订阅该Subject对象的订阅者,以便订阅者处理相应事件,到这里就完成了事件的发送与处理...} public boolean hasObservers() { return bus.hasObservers(); } } 引入LiveDataBus的想法 LiveData...LiveDataBus可以减小APK包的大小,由于LiveDataBus只依赖Android官方Android Architecture Components组件的LiveData,没有其他依赖,本身实现只有一个类...使用LiveDataBus可以大大减小APK包的大小。

2.3K30

Google 推荐 MVVM 架构中使用 Kotlin Flow

的使用 使用 Coil 加载图片 使用 ViewModel、LiveData、DataBinding 协同工作 使用 Motionlayout 做动画 App Startup 与 Hilt 的使用 增加...,造成内存泄露是很正常的事,大家可以 StackOverflow 上查看一下,有很多因为 RxJava 造成内存泄露的例子 RxJava 入门的门槛很高,学习过的朋友们,我相信能够体会到入门到放弃是什么感觉...Kotlin Flow 在数据源中的使用 [PokemonGo](https://github.com/hi-dhl/PokemonGo) 项目中,进入详情页,会检查本地是否有数据,如果没有会去请求...xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools...PokemonGo/app/src/main/java/com/hi/dhl/pokemon/ui/detail/DetailsFragment.kt 方式一: 使用两个 LiveData,一个是可变的

4.1K20

Android 面试题:为什么 Activity 都重建了 ViewModel 还存在?—— Jetpack 系列(3)

:数据驱动型界面控制器(本文)[2] 4、Flow:LiveData 的替代方案[3] 5、 MVC 到 MVP、MVVM、MVI:Android UI 架构演进[4] 6、ViewBinding:新一代视图绑定方案...关于 MVVM 等模式的更多内容,我们 5、 MVC 到 MVP、MVVM、MVI:Android UI 架构演进[10] 这篇文章讨论过。...正因为同一个 ViewModel 宿主使用的是同一个 ViewModelStore 映射表,因此同一个宿主上重复调用 ViewModelProvider#get() 返回同一个 ViewModel 实例...中的数据,其中包含 ViewModelStore 实例,而这一份数据会临时存储在当前 Activity 的 ActivityClientRecord(属于当前进程,下文说明); 阶段 2: 新 Activity...又由于这部分数据需要通过 Bundle 机制应用进程和 AMS 服务之间传递,因此会受到 Binder 事务缓冲区大小限制,只可以存储小规模数据。

1.1K20

反插件化:你的应用不是一个插件(转)

这样恶意软件就可以把核心的恶意代码放到单独的插件APK中,当需要更新的时候,只需远程服务器下载最新的APK文件进行替换即可。...点击劫持攻击中,受害人的网页可能会加载到恶意网页的iframe中。为了对抗攻击,当受害人服务器生成网页时,通常会添加一段JavaScript代码来检测页面是否主框架或子框架内部加载。...所以说,我们就可以根据运行时信息来分区是否处于虚拟环境中 进程信息 PID(进程ID),它是一直保持不断变化的。...举个例子,DroidPlugin库的进程名称类似于{host app pkg name}:PluginP02。...其中有一个特殊性,就是enable,系统用这个属性来判断APP启动的时候是否允许实例化。

1.7K20

Android Dev Summit 21 精彩内容盘点

Android11 起提供了兼容性测试工具,不重新编译 APK 的情况下可以针对变动的 API 进行测试、提高测试效率。...Android Auto 提供了针对驾驶员优化的应用体验,用户 Android Auto 上创建连接手机的服务,手机应用可以以更优化的界面显示在车机上。...你可以只 Model 层使用 Flow, View 层仍然使用 LiveData,通过 Flow.asLiveData 将 Flow 转换为 LiveData: // import androidx.lifecycle.asLiveData...活动期间有网友直播中询问是否还有 Flow 无法取代 LiveData 的场景,官方的回答是 LiveData 除了 API 更简单以外(相应的功能也比较弱),已经完全可以被 Flow 替代。...WorkManager 2.6 支持 Multi-Process,借助 RemoteListenableWorker 或者 RemoteCoroutineWorker 可以将任务运行在任意指定进程,实现跨进程的监听

1.7K20

Android开发笔记(八十)运行状态检查

如果app的运行状态发生了变化,那么原先处理正确的逻辑也可能处理失败,所以特定的情况下,我们得对app的运行情况进行检查。...apk安装信息 启动app的时候,常常会检查当前apk的安装信息,以此判断接下来要做哪些准备工作,举例如下: 1、获得apk的版本号,针对不同版本,分别对SQLite的数据库表做相应的变更操作。...2、获得apk的签名,据此判断安装包是否为合法来源。签名的介绍参见《Android开发笔记(七十三)代码混淆与反破解》。 3、获得apk的申请权限,从而判断app是否申请了相应的权限。...但是按照我们的本意,新进程只是为了运行单独的服务,并不需要初始化不相关的全局变量,因此这时候就得判断当前进程是否为主进程。...与Activity类似,Service也可能被安全软件杀死,导致使用该服务报空指针异常(比如接收广播后调用startForeground方法)。

58730
领券