问题标签 [android-architecture-lifecycle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
414 浏览

android - 安卓 MVVM。生命周期感知模型是代码味道还是适当的设计?

对于我的活动,我需要知道手机的连接状态。由于这是我的 UI 需要响应的数据,因此它属于MVVM的模型领域(如果您不同意,请告诉我)。

为了在不需要时不执行代码,我的模型代码目前正在通过实现订阅电话连接更改onCreate()和注销onDestroy()LifecycleObserver

为此,我在 Activity 代码中使用 viewModel 实例化并连接我的模型。

怎么感觉都不对。

在理想情况下,Activity 将是 View 层(MVVM 中的 V)的一部分,并且应该只知道 viewModel,但在上述情况下,生命周期感知使 Activity 也知道 Model。

那么,生命周期感知模型是一个合适的概念吗?还是我应该重新考虑设计?

0 投票
2 回答
1769 浏览

android - 事件包装器模式是否取代了 SingleLiveEvent 的使用?

我最近在我的 Android 应用程序中采用了 MVVM。为了解决应用程序生命周期的潜在问题,谷歌发布了 LiveData。

LiveData 的使用有不同的场景,正如Jose Alcérreca 撰写的中篇文章所指出的,您可以使用 SingleLiveEvent 或类似事件包装器模式的东西。

我想确保SingleLiveEvent事件包装器模式,这是在 Android MVVM 架构中与 LiveData 一起使用的最佳实践。而且我发现今年(2018 年)的Google I/O 应用程序没有使用SingleLiveEvent,而是使用事件包装器模式

之前我在项目android-architecture上开了一个issue,起初我正在寻求官方回复,但似乎根本没有任何评论。因此,我想听听已经使用这些东西的开发人员的建议并对此进行反思。

请分享您的宝贵经验,在此先感谢您。

0 投票
0 回答
517 浏览

android - 从 View 观察 LiveData 实例

我创建了一个 ViewGroup,它根据 LiveData 实例的状态更新其内容,但是我不知道在视图中观察 LiveData 实例是否会导致一些问题?

这是我正在使用的代码,它在onDestroyView被调用时删除了观察者。

该视图根据从 LiveData 接收到的状态显示错误、加载或内容视图,在 XML 中我可以像这样使用它:

这样我就可以重用这个已经有动画、加载和错误视图的布局,而无需在活动或片段中复制代码。但是我有一个关于通过视图观察 LiveData 的问题,我认为这样做是安全的,因为当视图被破坏时它会自行移除,但是我可能会错过这样做的其他含义。

0 投票
2 回答
11125 浏览

android-architecture-components - 强制分页库数据源刷新

在我的 ViewModel 中,我使用

哪个工作正常。但是,当我的数据更改时,LiveData<PagedList<Notification>>不会收到通知。我可以做些什么来触发LiveData刷新(ViewModel知道何时发生更改)。

0 投票
1 回答
502 浏览

android-fragments - 我应该在两个片段之间共享我的 ViewModel 吗?

我正在尝试遵循 Android 最佳实践并使用最新推荐的架构组件。到目前为止,您可以在这里看到我的尝试:https ://github.com/randroid88/TodayILearned

目前该应用程序的功能非常有限。

  • 它有一个 Room db 用于本地存储日记帐分录。
  • 一个片段HomeFragment列出了所有条目
  • 另一个片段EntryEditorFragment用于创建新条目。
  • 一个 ViewModel, EntryViewModel,它通过存储库更新数据。

问题是现在只有 HomeFragment 可以访问 EntryViewModel。

因此,在我当前的设计中,我通过参数包(使用新导航架构组件中的 SafeArgs)将新条目文本从 EntryEditorFragment 传递给 HomeFragment 然后 HomeFragment 通过 EntryViewModel 创建新条目:

这感觉不对。

如果 EntryViewModel 也可以访问 EntryEditorFragment 会更好吗?

为了做到这一点,我是否必须将 ViewModel 限定为 Activity,如本博客中所述?

这里的最佳做法是什么?

0 投票
1 回答
837 浏览

android - android.arch.lifecycle:extensions:1.1.1 目录

我正在尝试向我的项目添加生命周期:扩展,但它显示错误

网络上提供的所有解决方案都对我没有帮助。我的问题不是关于如何解决错误。检查 sdk 不同的目录后,我注意到以下目录中有一个目录,其中包含许多 Java 类:

我的问题是,从存储库成功下载“extensions-1.1.1.aar”后,它(aar 文件)将保存在哪个目录中?哪些文件将与 .aar 文件一起下载(例如 .pom/.pom.sha1 ...)?谢谢。

0 投票
1 回答
1152 浏览

android - 在 APK META-INF/android.arch.lifecycle_runtime.version 中复制的重复文件

构建我的 APK 时出现以下错误。

app build.gradle中添加的依赖如下

0 投票
1 回答
320 浏览

android - 传递给 singleArgViewModelFactory 时 ::MainViewModel 是什么意思

在 kotlin coroutines 实验室示例中, https: //codelabs.developers.google.com/codelabs/kotlin-coroutines/#6

它通过传递MainViewModel.FACTORY(repository)

MainViewModel 如下,不明白里面::MainViewModel用了什么语法

singleArgViewModelFactoryhas 构造函数:

哪个取一个函数(A) -> T,里面的那个是什么::MainViewModel意思 singleArgViewModelFactory(::MainViewModel)

0 投票
4 回答
9694 浏览

android - 重新创建片段时 ViewModel 重新获取数据

我正在使用带有导航架构组件的底部导航。当用户从一个项目导航到另一个项目(通过底部导航)并再次返回查看模型调用存储库函数以再次获取数据时。因此,如果用户来回移动 10 次,相同的数据将被提取 10 次。重新创建片段时如何避免重新获取数据已经存在?

分段

视图模型

存储库

导航 main.xml

视图模型工厂

在此处输入图像描述

0 投票
1 回答
1264 浏览

android - 仅当 minifyEnabled 和 LifeCycle v 2.1.0 时应用程序在创建 ViewModel 时崩溃

LinkageError使用创建视图模型时,我的应用程序在启动时崩溃lazy{}。崩溃仅在以下情况下发生:

  1. minifyEnabledtrue在 build.gradle 中设置为,并且
  2. 我用版本。2.1.0的生命周期组件。它适用于lifecycle-2.0.0withminifyEnabled

此外,崩溃仅发生在其中一个视图模型上。在此之前触摸的同一活动中的其他视图模型不会使应用程序崩溃。


崩溃发生在这里的第二行:

SearchStateViewModel

SearchStack只是一个 ArrayList:

并且SearchState是一个数据类:


堆栈跟踪:

标记为 (1) 的行是发生崩溃的 ViewModel 的延迟创建。
标记为 (2) 的行是发起延迟创建的 ViewModel 的第一次访问: