Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 内容提供商vs SharedUserId vs跨应用程序共享数据的全局过程_Android_Process_Android Contentprovider - Fatal编程技术网

Android 内容提供商vs SharedUserId vs跨应用程序共享数据的全局过程

Android 内容提供商vs SharedUserId vs跨应用程序共享数据的全局过程,android,process,android-contentprovider,Android,Process,Android Contentprovider,我发现了三种跨应用程序共享数据的方法 1.内容提供商 2.SharedUserId-当您为多个应用程序声明相同的共享用户id时,它们可以访问彼此的资源(数据字段、视图等)。所提供的应用程序使用相同的证书签名 3.全局流程-使用android:Process属性和命名流程(以小写字母开头)将一个应用程序的组件放在单独的流程中,另一个应用程序的组件放在单独的流程中,并与第一个应用程序的单独流程同名。现在,这些组件可以共享数据 我不知道什么时候使用,或者哪个更有效? 我发现了三种跨应用程序共享数据的方

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

1.内容提供商

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

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

我不知道什么时候使用,或者哪个更有效?

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

#2和#3是相同的,因为#3(共享流程)需要#2(
sharedUserId

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

  • 开始活动
  • 启动服务
  • 绑定到服务
  • 发送广播
我不知道什么时候该用

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

sharedUserId
和共享流程确实适用于设备制造商,在这些设备制造商中,应用程序是预先安装的,然后通过固件更新同步更新。就我个人而言,我建议设备制造商在大多数情况下也使用标准IPC。例如,如果应用程序A直接修改应用程序B的文件,应用程序B如何发现?如果应用程序B覆盖了应用程序A的更改,因为应用程序B不知道这些更改,该怎么办?在计算机编程的许多其他领域,我们已经摆脱了让多个应用程序的多个进程直接与其他文件协同工作的局面

哪个更有效

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

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

#2和#3是相同的,因为#3(共享流程)需要#2(
sharedUserId

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

  • 开始活动
  • 启动服务
  • 绑定到服务
  • 发送广播
我不知道什么时候该用

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

sharedUserId
和共享流程确实适用于设备制造商,在这些设备制造商中,应用程序是预先安装的,然后通过固件更新同步更新。就我个人而言,我建议设备制造商在大多数情况下也使用标准IPC。例如,如果应用程序A直接修改应用程序B的文件,应用程序B如何发现?如果应用程序B覆盖了应用程序A的更改,因为应用程序B不知道这些更改,该怎么办?在计算机编程的许多其他领域,我们已经摆脱了让多个应用程序的多个进程直接与其他文件协同工作的局面

哪个更有效


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

谢谢。“您还错过了所有其他形式的标准Android IPC”。我猜是通过隐式意图进行的活动和通过messenger提供的跨应用程序共享数据的服务。但这些方法只能用于共享有限数量的数据。您不能通过这些方法在应用程序之间共享完整的数据库。我想内容提供商是在不同应用程序之间共享大量结构化数据的最佳方法?“对于设备制造商来说,sharedUserId和共享流程确实存在,应用程序是预先安装的,然后通过固件更新同步更新。“。对不起,我不明白你在说什么样的应用程序?你是在谈论我们购买手机时已经安装的应用程序吗?它们与其他应用程序有何不同?@bhunneshvarma:“我想内容提供商是你希望在不同应用程序之间共享大量结构化数据的最佳方式。”--如果要公开的API看起来像数据库(查询、插入、更新、删除)或流,请使用
ContentProvider
。如果要公开的API是自定义的,请使用绑定服务。“你们是在谈论我们购买手机时已经安装的应用程序吗?”--是的。“它们与其他应用有何不同?”--它们由制造商控制,通常只有在整个设备更新时才会更新。谢谢..假设我创建了一些应用程序,我希望如果用户登录其中任何一个应用程序,那么他应该登录同一设备中的所有其他应用程序。使用SharedUserId或AccountManager执行此操作的更好方法是什么还是ContentProvider?@bhuveneshvarma:“使用SharedUserId或AccountManager进行此操作的更好方法是什么?”——IMHO,最好的答案是“没有此功能”。其中,
AccountManager