【问题标题】:Content Provider vs SharedUserId vs Global Process for sharing data across applications用于跨应用程序共享数据的 Content Provider vs SharedUserId vs Global Process
【发布时间】:2018-05-05 11:06:13
【问题描述】:

我发现了三种跨应用程序共享数据的方法。

1.内容提供者

2.SharedUserId-当您为多个应用程序声明相同的共享用户 ID 时,它们可以访问彼此的资源(数据字段、视图等)。提供的应用程序使用相同的证书签名。

3.全局进程-通过使用 android:process 属性和以小写字母开头的命名进程,将一个应用程序的一个组件放在一个单独的进程中,并将另一个应用程序的另一个组件放在同名的单独进程中第一个应用程序的单独进程。现在这些组件可以共享数据。

我很困惑何时使用什么更有效?

【问题讨论】:

    标签: android process android-contentprovider


    【解决方案1】:

    我发现了三种跨应用程序共享数据的方法。

    #2 和 #3 是相同的,只要 #3(共享进程)需要 #2 (sharedUserId)。

    您还错过了所有其他形式的标准 Android IPC,包括:

    • 开始活动
    • 启动服务
    • 绑定到服务
    • 发送广播

    我很困惑何时使用什么

    普通应用程序开发人员应该使用#1 (ContentProvider) 或我上面概述的其他标准 Android IPC 机制之一。您无法控制用户何时更新应用,并且使用正式的 IPC 会强制在应用之间明确分离,迫使您考虑 API 合同、API 版本控制和相关问题等问题。

    sharedUserId 和共享流程确实适用于设备制造商,其中预先安装了应用程序,然后通过固件更新同步更新。就个人而言,我建议设备制造商在大多数情况下也使用标准 IPC。比如App A直接修改了App B的文件,App B怎么查出来的?如果 App B 然后覆盖 App A 的更改,因为 App B 不知道这些更改怎么办?在计算机编程的许多其他领域,我们已经摆脱了让来自多个应用程序的多个进程直接处理彼此文件的问题。

    哪个更高效?

    在这种情况下,效率不应该成为问题,因为您应该很少使用这些技术中的任何一种。如果您有两个应用程序需要经常相互通信,那么您确实有一个应用程序,您应该以这种方式实现它。

    【讨论】:

    • 谢谢..“您还错过了所有其他形式的标准 Android IPC”。我猜活动是通过隐式意图和服务通过信使跨应用程序共享数据。但是这些只能用于共享有限数量的数据。您无法通过这些方法在应用程序之间共享完整的数据库。我想内容提供商是您希望在不同应用程序之间共享大量结构化数据的最佳方式?
    • "sharedUserId 和共享进程确实适用于设备制造商,其中预先安装了应用程序,然后通过固件更新同步更新。"..对不起,但我无法理解什么您指的是哪种应用?您指的是我们购买手机时已安装的应用吗?它们与其他应用有何不同?
    • @BhuvneshVarma:“我想内容提供商是您希望在不同应用程序之间共享大量结构化数据的最佳方式?” -- 如果您要公开的 API 看起来像数据库(查询、插入、更新、删除)或流,请使用 ContentProvider。如果您要公开的 API 是自定义的,请使用绑定服务。 “您是否在考虑我们购买手机时已经安装的应用程序?” - 是的。 “它们与其他应用程序有何不同?” -- 它们在制造商的控制之下,通常只有在整个设备更新时才会更新。
    • 谢谢..假设我已经创建了一些应用程序,我希望如果用户登录其中任何一个应用程序,那么他应该登录同一设备中的所有其他应用程序。有什么更好的方法this-使用 SharedUserId 或 AccountManager 或 ContentProvider?
    • @BhuvneshVarma:“使用 SharedUserId 或 AccountManager 有什么更好的方法?” - 恕我直言,最好的答案是“没有那个功能”。在这两个中,AccountManager 可能是更好的解决方案。不过,请务必允许支持用户拥有多个帐户。仅仅因为认为用户希望在所有应用程序中使用相同的登录信息并不意味着用户希望使用相同的登录信息。跨度>
    猜你喜欢
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多