android - android的ViewModel的奇怪行为
问题描述
当我尝试通过在每次离开活动并返回时在开发人员选项中启用“不保留活动”来模拟我的应用程序中的配置更改时,ViewModel
就会重新创建!不ViewModels
应该处理这些情况吗?
我可以通过保存我的活动状态来解决这个问题,onSaveInstanceState
但是使用 a 有什么意义ViewModel
呢?
解决方案
当我尝试通过在每次离开活动并返回时在开发人员选项中启用“不保留活动”来模拟我的应用程序中的配置更改时,ViewModel 被重新创建!
AFAIK,“不要保留活动”会在您离开活动时破坏活动。它不模拟配置更改。
在 Android 8.1 上,该设置明确指出:“用户离开后立即销毁所有活动”。
ViewModels 不应该处理这些情况吗?
系统ViewModel
处理配置更改。它不处理被破坏的活动或被终止的进程。
要模拟配置更改,请更改配置。例如,您可以旋转屏幕或更改您的区域设置。
我可以通过将我的活动状态保存在 onSaveInstanceState 中来解决这个问题
任何可以进入已保存实例状态的东西Bundle
都应该进入已保存实例状态Bundle
,因为它处理配置更改和进程终止。
使用 ViewModel 有什么意义?
ViewModel
是否存在无法进入已保存实例状态的内容Bundle
,例如:
- 大事(
Bitmap
照片) - 活的东西 (
LiveData
, RxJavaObservable
等) - 输入错误的东西(你不能把 a 放在 a
Socket
中Bundle
) - 并非真正属于“实例状态”的东西,在 Android 终止进程时不需要,但您希望使用它们进行简单的配置更改
- 等等
推荐阅读
- achartengine - x 轴的偏移标记 achartengine 条形图与值的比较
- c# - 需要根据输入文件号查找确切的文件名列表
- javascript - Crypto.getRandomValues 的熵源是什么?
- quarkus - 如何覆盖 Quarkus 中的 CDI bean 进行测试?
- laravel - 在应用服务提供者中使用 app()->setLocale() 时类翻译器不存在
- vhdl - 制作一个小的 VHDL 脚本,当输入 1 时输出 1(5v) 2 秒,然后返回到零
- typescript - 从对象字面量派生 TypeScript 接口
- spring-security - 用户配置文件信息存储在 JWT 中或使用 API
- python - OpenCV:Canny 边缘检测器获取 minEnclosureCircle
- java - 数据可用时发送数据到串口