在Room数据库实体上实施Parcelable是一种好习惯吗?

时间:2019-05-09 11:38:17

标签: android performance android-intent android-room parcelable

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

1 个答案:

答案 0 :(得分:1)

  

我只想知道这是否是个好习惯。

恕我直言,在现代Android应用程序开发中,出于某些原因,不,

  • 存储库模式:Android应用程序体系结构中的当前模式是隔离数据存储并将关注转移到“存储库”对象中。存储库知道数据来自何处以及去往何处的详细信息(房间,领域,改造等)。该应用程序的其余部分既不知道也不在乎,因为该应用程序的其余部分仅与存储库对话。使用这种模式,您将在活动和片段之间传递标识符,并且存储库将基于这些标识符移交模型对象。

  • 隐藏实现细节:您的UI应该使用一组理想的模型类,这些模型类与数据存储或传输的特定实现无关。这样,如果您选择更改实现(例如,从Room更改为Realm),则更改将保持隔离状态,并且对UI的影响很小。如果您使用存储库,则该存储库将负责将Room实体和Retrofit响应转换为应用程序其余部分都知道如何使用的标准化模型对象。

  • 单一事实来源:一旦您开始通过Intent附加功能来传递对象,就在制作副本。如果您的应用程序的一部分随后希望修改该模型对象,那么该应用程序的其余部分如何保存数据的其他副本,那么将如何知道这些更改?理想情况下,您的存储库带有反应式API,该存储库是进行数据更改的一方。然后,它可以将数据更改通知其他有关方面,从而提供模型对象的最新再现。

  • IPC内存限制:每次将IntentstartActivity()startActivityForResult()setResult()等一起使用时, Intent的内容将传递给核心OS进程...即使正在启动的活动与请求启动该活动的代码处于同一进程中。 Intent的大小有内存限制(大约1MB或更小)。现在可以传递完整的模型对象,但是现在如果有人在模型中添加Bitmap字段或其他内容,则可能会遇到麻烦。