问题标签 [android-architecture]

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 回答
139 浏览

android - 我应该使用什么样的架构来进行 android 开发?

我希望得到一些关于制作应用程序的最佳方法的建议,希望你们能帮助我。

我对 Android 编程相当陌生,我已经达到了可以毫无困难地用 Java 编写任何应用程序的地步,而且随着我深入 Android 世界,我了解到有许多不同的方式来制作应用程序。

正因为如此,我在学习什么以及如何成为一名优秀的开发人员方面迷失了方向。

有很多架构和不同的编程方式,例如 MVC、MVP、MVVM 等。我已经阅读了许多博客和 GitHub,它们在纸上听起来都很棒,但是我怎么知道为我正在制作的应用程序选择哪一个呢?

你们能帮我理解我应该采取的最佳方法吗?

先感谢您 :)

0 投票
2 回答
3296 浏览

android - android viewmodels之间的交互

我有一个客户详细信息页面,它从“客户”表中加载客户详细信息,并允许对某些详细信息进行一些编辑,其中一个是客户的位置。客户的位置是一个微调器,它从“位置”表中加载下拉项目。

所以我目前的实现是我有一个 CustomerActivity,它有一个 CustomerViewModel 和 LocationViewModel

我的问题是如何使用“客户”表中的值设置位置微调器,因为两个视图模型的 onChanged 执行顺序可能不同(有时客户加载速度更快,而其他位置加载速度更快)。

我曾考虑仅在加载客户后加载位置,但无论如何我可以同时加载两者,同时使用“客户”表中的值填充客户的位置微调器?

0 投票
1 回答
3313 浏览

android - LiveData.addSource onChanged 事件未调用 Android

我正在 Kotlin 中使用 Android Archi+Retrofit+RxAndroid。从服务器获得响应时,我需要更新我的数据对象。但是 livedata.addSource 的 onChanged 没有调用。

我正在从 Git 代码中获取帮助:- https://github.com/shahbazahmed1269/AndroidGithubIssues

这是我在 Kotlin 中的代码:-

}

我来自 LoginRepository 的响应正在打印,但不是来自 ViewModel 类。

0 投票
1 回答
551 浏览

android - Android - 奥利奥迁移后 Xwalk 崩溃

我想对应用程序目标进行一些更改Android SDK 22 (5.1)

我在Android Studio 3中加载了项目,得到了 Gradle 升级消息。当然,这样做会使整个事情爆炸,因为新的 Gradle 处理依赖项的方式变得非常挑剔。我决定全力以赴,只做整个迁移。无论如何都必须在某个时候这样做。

该应用程序使用一个XWalkView(在一个类中扩展),而不是本机 Webview,因为我们希望运行一些 WebGL。Xwalk 是嵌入的而不是共享的。

只需将 Gradle 文件更新为最新的 Libs,基本上将 Android 支持更改为最新的目标 SDK,使应用程序在 Android 7+ 设备上启动时崩溃(直接崩溃消息)(Oreo 在emu 上测试)。该应用程序之前已正确加载。Logcat 如下:

Xwalk 崩溃

在应用程序代码中,崩溃似乎源自以下行: XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true);,它位于类扩展 中Application,而该类又包含所用工具的调试/发布配置。删除所述行允许应用程序正常工作,直到它实际尝试加载XWalkView.

该应用程序在Android 4.4(19 分钟 SDK for app)、5.0 (21) 和 6.0 (23) 上正常运行。

我一直在互联网上寻找可能的解决方案,但还没有找到有用的东西。我知道人行横道已被弃用,可能应该被替换,但 Android 中没有提供 WebGL 支持,我目前看不到当前图形发生变化。

如果有任何其他可能有用的信息,请告诉我,我会提供。

希望有人可以阐明。提前致谢。

编辑:

经过一番玩耍,我发现问题出在库文件上。下载crosswalk.aar我发现它有2个版本:

  • xwalk_core_library-23.53.589.4-arm.aar
  • xwalk_core_library-23.53.589.4-arm64.aar

我删除了 Maven 版本并手动包含了文件。当我使用 arm64 位时,我实际上可以在 Android 7 平台上毫无问题地使用该应用程序。但是后来我在其他版本中遇到了同样的 xwalk 崩溃。在 arm 库的情况下,事情又回到了以前的样子。

他们不能一起工作。构建时出现Duplicate zip file错误。

所以新的问题是:有没有办法告诉 gradle 每个架构使用哪个库文件?我一直在四处寻找,但我找不到任何东西。

0 投票
2 回答
1077 浏览

android - 一个即时应用程序的每个模块中应该放置哪些依赖项?

我正在为其他人编写一个即时应用程序以学习如何编写一个即时应用程序,并希望获得一些关于如何最好地为依赖项构建应用程序的想法。

现在阅读有关项目结构的 Android 开发者文档并参考下图:

在此处输入图像描述

我想知道新的gradle 3.0 依赖配置,哪些库应该存在于哪些模块中?

基本特征

我在想基本功能模块中的几乎所有东西都应该使用apigradle 配置,因为基本功能模块本质上会编译成 AAR 库文件。我可能对这个模块有一个问题,如果要使用 ROOM,这将是放置它的模块吗?

特征

现在在功能模块中,我的理解是一切都应该使用implementationgradle 配置,因为这些模块不应该将依赖关系泄漏到任何其他模块,以便真正使它们彼此独立。

只是想对我的理解进行一些确认,以及对项目有帮助的任何想法。如果你想查看我目前得到的代码,这里是 github repo。目前真的很简单,但我正在考虑使用 Retrofit 来搞乱星球大战 API。

感谢您提供的任何帮助,如果您想尝试自己提出拉取请求以获取其他人应该知道的即时应用程序的任何其他概念,请感谢您的帮助并乐意接受任何贡献。

0 投票
3 回答
2930 浏览

android - 我可以在哪里使用 ROOM 保存数据?

我正在研究Android架构组件,特别是ROOM,但我是初学者,所以我正在尝试创建一个简单的应用程序来存储用户并在屏幕上显示用户名(用户可以只是代码中的测试不需要要创建的 UI)。

当我在 DB 上插入用户时出现错误,因为我无法在主线程上调用它,那么我可以在哪里调用它?我看到有些人使用 AsyncTask,但我认为这不是正确的方法或使用另一个库(如 RXjava),我看到有些人使用实时数据,但我不明白如何/在何处使用实时数据在 DB 上插入数据。这就是我所拥有的:

主要活动:

用户:

用户道:

用户视图模型:

0 投票
2 回答
936 浏览

android - Android Lifecycle ViewModel 在横向模式下锁定和解锁后不持久

我有一个非常简单的应用程序,其中包含一个虚拟Activity和虚拟的 Android Lifecycle ViewModel ViewModel

片段活动

视图模型

视图模型工厂

显现

杀死 ViewModel 的步骤

  1. 将应用设置为横向模式
  2. 锁定屏幕
  3. 解锁屏幕并观察 ViewModel 消失了,Activity 被销毁并创建了两次。

日志输出

此行为与此处的发现一致,但是,我希望 arch 库能够处理这种情况,因为它非常标准,并且纵向模式下的锁定和解锁按预期工作。

在这种特殊情况下防止它ViewModel被破坏有什么好主意吗?

在 Nexus 5X、API 27 上测试

编辑 1:在添加要保存的字符串onSaveInstanceState并检查该字符串是否在所有活动破坏和创建中持续存在之后,我很确定这是库的错误。

编辑2:为什么这是一个问题?

问题 1:在横向锁定的情况下,捆绑包以某种方式从 Activity 244798673 正确路由到 Activity 218111434 02-20 16:30:33.241,但是ViewModel无法通过这一系列操作持续存在。这与捆绑行为不一致,因为我们在技术上仍然在同一个 Activity 范围内。

问题2:竖屏锁定和解锁的日志输出:

ViewModel在纵向锁定和解锁中持续存在,这与横向场景不一致。

0 投票
1 回答
354 浏览

android - Not able to get the LifeCycle ViewModel Class Using ViewModelProvider

I am trying to get the ViewModel Class for the specific fragment. But ViewModelProvider.of(this).get(UserListViewModel.class) does not work for me. Extending my Fragment from "android.support.v4.app.Fragment", but still it does not work. Here is the code

0 投票
2 回答
988 浏览

android - Android MVP 中的一个 Activity 中的多个片段

我正在使用 Android MVP 架构,我正在关注Google MVP Architecture

当活动有多个片段时,我面临问题,在我的情况下,活动有 2 个选项卡。我无法理解,我应该为每个 Fragment 创建两个 Presenter 还是应该为此创建一个 Presenter?现在与 View 相同。

即使我在google-sample github repository上也没有找到任何解决方案。

谁能建议我或向我展示满足我上述要求的实时代码。

0 投票
0 回答
43 浏览

android - 运行时来自子类的 Dagger 引用模块

我有 android 库 LBase、L1、L2,它们具有 LBase->L1 和 LBase->L2 等依赖项。以及从 L1 构建的 android Apps A1 和从 L2 构建的 A2

在 LBase 中

在 L1

在 L2

似乎 ModuleBase.class 不能是接口或抽象类,所以我正在寻求帮助来实现相同的目标。

基本上我要做的是在运行时分别在 A1 或 A2 中的“ModuleL1.class”或“ModuleL2.class”中提供 LBase(而不是 ModuleBase.class)中的实现模块。