最终实现界面

adb实现步骤

//新建user0 的profile工作区
adb shell pm create-user --profileOf 0  --managed test
//查看新建user id = 12
lito:/ # pm list users
Users:UserInfo{0:机主:c13} runningUserInfo{12:test:1020}//启动user 12
am start-user 12
lito:/ # am start-user 12
Success: user started
lito:/ # pm list users
Users:UserInfo{0:机主:c13} runningUserInfo{12:test:1030} running
lito:/ #

清除launcher3数据

adb shell pm clear com.android.launcher3

开机后Profiles工作区启动流程

ActivityManagerService.java finishBooting() 中调用mUserController.scheduleStartProfiles(); 来启动profiles工作区。
下面是finishBooting的调用栈。

01-02 07:44:11.053 W/System.err( 1027): java.lang.Exception: startProfile
01-02 07:44:11.053 W/System.err( 1027):     at com.android.server.am.ActivityManagerService.finishBooting(ActivityManagerService.java:5650)
01-02 07:44:11.053 W/System.err( 1027):     at com.android.server.am.ActivityManagerService.bootAnimationComplete(ActivityManagerService.java:5697)
01-02 07:44:11.053 W/System.err( 1027):     at com.android.server.wm.WindowManagerService.performEnableScreen(WindowManagerService.java:3492)
01-02 07:44:11.053 W/System.err( 1027):     at com.android.server.wm.WindowManagerService.access$1100(WindowManagerService.java:318)
01-02 07:44:11.053 W/System.err( 1027):     at com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:4936)
01-02 07:44:11.053 W/System.err( 1027):     at android.os.Handler.dispatchMessage(Handler.java:106)
01-02 07:44:11.054 W/System.err( 1027):     at android.os.Looper.loop(Looper.java:223)
01-02 07:44:11.054 W/System.err( 1027):     at android.os.HandlerThread.run(HandlerThread.java:67)

具体的start user在UserController.java 中

    void scheduleStartProfiles() {// Parent user transition to RUNNING_UNLOCKING happens on FgThread, so it is busy, there is// a chance the profile will reach RUNNING_LOCKED while parent is still locked, so no// attempt will be made to unlock the profile. If we go via FgThread, this will be executed// after the parent had chance to unlock fully.FgThread.getHandler().post(() -> {if (!mHandler.hasMessages(START_PROFILES_MSG)) {mHandler.sendMessageDelayed(mHandler.obtainMessage(START_PROFILES_MSG),DateUtils.SECOND_IN_MILLIS);}});}void startProfiles() {int currentUserId = getCurrentUserId();if (DEBUG_MU) Slog.i(TAG, "startProfilesLocked");List<UserInfo> profiles = mInjector.getUserManager().getProfiles(currentUserId, false /* enabledOnly */);List<UserInfo> profilesToStart = new ArrayList<>(profiles.size());for (UserInfo user : profiles) {if ((user.flags & UserInfo.FLAG_INITIALIZED) == UserInfo.FLAG_INITIALIZED&& user.id != currentUserId && !user.isQuietModeEnabled()) {profilesToStart.add(user);}}final int profilesToStartSize = profilesToStart.size();int i = 0;for (; i < profilesToStartSize && i < (getMaxRunningUsers() - 1); ++i) {startUser(profilesToStart.get(i).id, /* foreground= */ false);}if (i < profilesToStartSize) {Slog.w(TAG, "More profiles than MAX_RUNNING_USERS");}}boolean startUser(final @UserIdInt int userId,final boolean foreground,@Nullable IProgressListener unlockListener) {checkCallingPermission(INTERACT_ACROSS_USERS_FULL, "startUser");TimingsTraceAndSlog t = new TimingsTraceAndSlog();t.traceBegin("startUser-" + userId + "-" + (foreground ? "fg" : "bg"));try {return startUserInternal(userId, foreground, unlockListener, t);} finally {t.traceEnd();}}

Android adb指令实现应用双开功能相关推荐

  1. Android 常用adb指令记录总结

    Android 日常开发adb指令记录(不断更新): 注:这里包名均使用com.redsun.phone代替. 一.java -version: 查看java安装版本 二.adb  shell: 查看 ...

  2. android仿卷皮框架,Android刷机常用adb指令集合

    Android刷机最常用到的就是adb命令,不过adb命令也跟程序员敲代码一样分为很多种,不同的指令执行之后会起到不同的效果.刷机常用的adb指令有哪些相信同学们也多少能猜到一点点皮毛了,小编今天就为 ...

  3. Android adb使用总结记录

    文章转自:https://github.com/mzlogin/awesome-adb 博主做了格式化以及持续补充,作为自己的一个索引使用. 文章目录 1. 基本用法 1.1 命令语法 1.2 为命令 ...

  4. 【转官方】Android ADB调试命令、支持的命令、ADB文档

    ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具. 持续更新中,欢迎提 PR 和 Issue 补充指 ...

  5. Android系统源码目录及功能介绍

    Android的移植按如下流程:     1.android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来.     2.正确挂载文件系统,确保内核启动参数和 android 源代码 ...

  6. 一步步教你如何简单自定义 ADB 指令

    adb 指令相信大家都用得不少,但是自定义 adb 指令不知道大家又试过没有?最近公司有一个需求,需要自定义 adb 指令来对手机硬件进行测试,这篇博客我们就来一起聊一聊我的实现方法,希望能帮助到有相 ...

  7. Android手机指令操作释疑

    有人问我一个关于Android手机root与否的问题,她说明明iTools显示已取得root权限,但她就是没法在该手机上运行需要root权限的App如钛备份等等.我告诉她最好的确认方式便是以adb指令 ...

  8. Android adb logcat使用技巧

    前言 新买的笔记本E431装了最新版的Eclipse,搞定了Android开发环境,可是logcat里查看东西居然仅仅显示level,没有错误的具体信息.我本身也不是一个愿意折腾图形界面,更喜欢纯命令 ...

  9. Android Adb 源码分析

    扭起屁股得意洋洋 最近,我负责的项目因为临近量产,把之前的userdebug版本关闭,转成了user版本,增加selinux的权限,大家都洋溢在项目准备量产的兴奋和喜悦之中不能自拔 谁知,好景不长,u ...

最新文章

  1. 【jsp】写jsp文件的准备
  2. 技校毕业是什么学历_技校毕业是什么学历
  3. ML之SVM:调用(sklearn的lfw_people函数在线下载55个外国人图片文件夹数据集)来精确实现人脸识别并提取人脸特征向量
  4. 刷脸支付弊端举例_刷脸支付的优势和弊端,你都知道?
  5. 一个DEMO让你彻底理解线程池
  6. matlab调用手机摄像头,MATLAB下使用摄像头
  7. CDOJ 1401 谭爷的黑暗沙拉 数学
  8. 运维工程师之-MySQL的故障问题总结
  9. 中英文对照 —— 宗教
  10. 云存储技术与云存储服务
  11. MSsql差异备份总结
  12. pythonATM,购物车项目实战_补充4-db模块
  13. 无法启动mysql server问题:“1067”进程意外终止
  14. GNS3 思科交换机配置三层转发
  15. Vijos 3764 牛奶题
  16. 【Python】2019年武汉市天气数据分析与可视化
  17. Android 监控APP是否在后台运行
  18. 美国音乐学院计算机音乐专业排名2015年,2019USNEWS美国音乐专业排名前100!
  19. c语言中tc和vc有什么区别,转:写C++用什么编译器好——TC,VC++6.0,DEV C++,VS2005浅显比较...
  20. FastAPI:快速开发一个文本转语音的接口

热门文章

  1. MATLAB运行程序报错:“等号右侧的输出数目不足,不满足赋值要求。”的解决方法
  2. 190111- Dartmouth COCS1 【第五章:参数、返回值和范围】
  3. 测试代码怎么做抽象才是有意义的?
  4. 在新手机里如何找回上一个手机便签里的内容
  5. PHP框架之ThinkPHP
  6. TokenGazer《一问到底》| 第46期:研究员 VS eNotes
  7. Camera Calibration Toolbox for Matlab使用教程
  8. 2021年全球最具吸引力的雇主:谷歌、微软、苹果占据前三名
  9. 阿里巴巴直播内容风险防控中的AI力量
  10. PTC Mathcad Prime7.0,简单易用的用户界面