Android 4.4多用户模式实现详解

18次阅读
没有评论

多用户模式在Android 4.4中的实现机制详解

概述

自从Android 4.4(KitKat)开始,Android系统引入了多用户支持,允许不同类型的用户使用同一台设备。本文将解释多用户模式在Android 4.4中是如何通过文件系统分区和相关的UI、数据管理方式实现的。尽管类multiUser以及与之配套的服务用于管理用户的创建与注销过程,但是核心仍然依赖于现有的POSIX文件系统权限机制。

文件系统分区

Android 4.4中的多用户支持基于现有的一套权限隔离机制进行扩展。以前应用私有数据被存储在 /data/data/ 目录下,现在这些数据被存储在路径 /data/users/<n>, 其中$n$是用户配置文件的ID。每个用户都会有一个独立的目录,并且在该目录下的每个应用都有自己的子目录。POSIX权限保护了用户数据目录的隐私性,不仅能够防止不同用户之间的数据共享,还能避免应用之间互相访问。

用户界面与UI开发

为了支持多用户的用户界面(如启动器、特定的应用图标等),Android会在不同的UID下为每个用户运行相同的应用程序实例。这意味着启动器或者其它应用程序虽然只有一个APK文件存在,但两个不同的用户提供完全独立的环境和服务,且各自负责管理自己的配置和数据。

切换页面至另一个用户时,并非所有的应用程序都需要重新加载或重启。系统会确保在后台保持多任务支持,不同用户的同一应用可以同时运行(即两个实例),当前背景图标的那个应用将会成为新的焦点应用。这种机制下,不同用户的应用之间既共享了代码执行的拷贝,又各自拥有独立的数据存储区域。

包管理及系统应用程序

对于普通而言的Android原生应用如联系人、通话记录、相册等,在多用户的环境下会保持数据隔离和功能共享性。这些应用会被分开安装在每个用户对应的沙盒环境中(即不会生成新的APK拷贝)。然而,带有 INTERACT_ACROSS_USERS 权限的应用程序则可以访问所有用户的用户目录以及其他用户间可访问的资源。

OS层面技术

多用户模式并没采用像虚拟化那样的较复杂的技术解决方案。因为原有的Android系统权限机制足以保障应用间的隔离性与安全性。例如,对于共享设备如移动电话、相机或媒体的应用来说,在不同用户之间切换时不需要频繁重启或是重新安装这些应用以维护其数据完整性。

进一步讨论

  1. 原生应用程序及其数据管理
    官方文档中解释,即使是系统自带的应用程序(如照片库、拨号器等),也遵循文件系统和隔离权限的规则。当某一用户升级了一个系统应用时,该应用更改会立即生效并应用于所有用户账户。

  2. 用户多任务与虚拟化技术
    由于需要保持系统的可用性和低功耗性,所以Android并没有采用一些额外复杂的虚拟化技术如ThinVisor或Hypervisor等来支撑多用户的模式。这不仅仅是因为复杂度增加还因为其可能引起性能、电池消耗及系统稳定性等问题。

如果有更多专业细节上的疑问或者对某些具体实现感兴趣的地方,请直接询问。例如有关上述讨论中的文件路径管理方法的具体实施示例,以及查看与多用户机制相关核心代码逻辑可以参考系统的 settingsmultiuser_manager 模块提供的API和源码。

正文完