android:sharedUserId, process说明
android:sharedUserId
表示一个linux用户ID,默认情况下,系统为每个应用程序分配一个独立的ID。我们可以设置这个标签为两个不同的应用设置为相同的ID——前提条件是这两个应用拥有相同的签名。此时这两个应用程序虽然运行在不同的进程中,却可以访问彼此的/data/data/<package name>/目录下的存储文件。
/** * File creation mode: the default mode, where the created file can only * be accessed by the calling application (or all applications sharing the * same user ID). * @see #MODE_WORLD_READABLE * @see #MODE_WORLD_WRITEABLE */ public static final int MODE_PRIVATE = 0x0000;
上述片段是Context中关于SharedPreferences等私有存储方式中关于MODE_PRIVATE模式的说明,其中我们可以看到注释中说明了使用相同User ID的应用是可以共享应用私有存储空间的。虽然这种方式不推荐使用(跨应用共享数据推荐ContentProvider等其它方式)。
android:process
各类组件元素的清单文件条目—<activity>、<service>、<receiver> 和 <provider>—均支持 android:process 属性,此属性可以指定该组件应在哪个进程运行。我们可以设置此属性,使每个组件均在各自的进程中运行,或者使一些组件共享一个进程,而其他组件则不共享。 此外,我们还可以设置 android:process,使不同应用的组件在相同的进程中运行,但前提是这些应用共享相同的 Linux 用户 ID 并使用相同的证书进行签署。
此外,<application> 元素还支持 android:process 属性,以设置适用于所有组件的默认值。
默认情况下个,应用程序的所有组件均在同一个进程下运行。
之所以这些组件可以在独立的进程中运行是因为启动他们需要通过intent,也就是说数据传递是跨进程的。
android平台对应用都有内存限制,准确的说是android平台对每个进程有内存限制,比如某机型对对进程限制是24m,如果应用有两个进程,则该应该的总内存限制是2*24m。使用多进程就可以使得我们一个apk所使用的内存限制加大几倍。 所以可以借此图片平台对应用的内存限制,比如一些要对图片、视频、大文件进程处理的好内存的应用可以考虑用多进程来解决应用操作不流畅问题。
实现多进程可以通过设置service、broadcast、activity的标签android:process来实现。 一般情况下启动这些组件默认是在同一个进程里运行的,如果设置了android:process标签,则会运行在其他进程里。