android4.2增加了多用户功能,终于在迟迟之后与
Linux保持了一致。但是手机上的多用户其实是相当鸡肋的,试想手机这种移动设备基本上就是每一个人的唯一id,所以基本上不存在多用户共用设备的情况。也正因为此以及专利的原因,所以电话上的多用户功能是关闭的,只有平板上的多用户是打开的。但还是要感谢谷歌开发人员引入多用户机制,这样可以帮助开发一些安全系统有极大帮助。
但打开多用户之后,有一个比较蛋疼的地方是无法在多用户中打电话发短信。查看源码的知,这是Android对于电话通信这一块根本没有做多用户兼容性适配。只是在PhoneApp中简单粗暴的做了一个单用户判断if (UserHandle.myUserId() == UserInfo.ROOT_USER_ID ),在其它用户中根本无法使用电话和短信。而平板上又无这种通信需求,所以谷歌开发人员根本没在这块做代码适配。唉,无奈我们公司项目需要这方面的功能,即在多用户下也要能打电话发短信。所以只能硬这头皮上了,去做谷歌人员未竟的工作。这个过程是痛苦的前期后后后找了好几个phone方面比较熟悉的兄弟帮忙分析代码,加起来有快10天的工作量,终于初步满足了需求,能打电话发短信了。下面是将这一过程中遇到的问题,做个摘录以备忘。
首先理解多用户原理,就算多用户到底是一个什么东西以及是一个什么样的实现机制。多用户固名思意,就是在同一台设备上隔离出另一个用户空间,这个空间里面运行的程序与普通空间运行的程序是隔离的,完全是在两个进程中,当然数据的存储,比如数据库也完全是独立的。最直观的感受就是,两个用户中装上同一个应用,那么这两个应用的导航页是需要走两遍的。当然这里面涉及到很多隔离,比如install,锁屏,某些设置等,所以在看4.2之后的源代码,会发现基本上所有的模块都涉及到多用户的判断,这说明android在加多用户这个功能的时候,