我正在学习我的Android开发技能,并且一直在使用Architecture Components。因此,我使用Room批注创建了一个实体类以保持对数据库的持久性,并在实体类上实现了Parcelable,部分目的是将实体对象放入Intent对象中并将其在 Activity/fragment 之间传递。我只想知道这是否是一个好习惯。使用诸如数据库泄漏或安全漏洞之类的方法有任何弊端吗?只是好奇。

最佳答案



恕我直言,在现代Android应用程序开发中,不可以,原因如下:

  • 存储库模式:Android应用程序体系结构中的当前模式是隔离数据存储并将关注转移到“存储库”对象中。存储库知道数据来自何处和去向的详细信息(房间,领域,改造等)。该应用程序的其余部分既不知道也不在乎,因为该应用程序的其余部分只是与存储库对话。使用这种模式,您将在 Activity 和 fragment 之间传递标识符,并且存储库将基于这些标识符移交模型对象。
  • 隐藏实现细节:您的UI应该使用一组理想的模型类,这些模型类与数据存储或传输的特定实现无关。这样,如果您选择更改实现(例如,从Room更改为Realm),则所做的更改将保持隔离状态,并且对UI的影响很小。如果您使用存储库,则该存储库将负责将Room实体和Retrofit响应转换为其他应用程序都知道如何使用的标准化模型对象。
  • 真相的唯一来源:一旦您开始通过Intent extras传递对象,就在制作副本。如果您的应用程序的一部分随后希望修改该模型对象,那么该应用程序的其余部分如何保存数据的其他副本,那么将如何知道这些更改?理想情况下,您的存储库带有反应式API,该存储库是进行数据更改的一方。然后,它可以将数据更改通知其他有关方面,从而提供模型对象的最新表示。
  • IPC内存限制:每次将IntentstartActivity()startActivityForResult()setResult()等一起使用时,该Intent的内容都会传递给核心OS进程...即使正在启动的 Activity 与该进程处于同一进程中请求启动该 Activity 的代码。 Intent的大小有内存限制(大约1MB或更低)。现在可以传递完整的模型对象,但是现在如果有人在模型中添加Bitmap字段或其他内容,则可能会遇到麻烦。
  • 10-08 09:14
    查看更多