您的位置:首页 > 移动开发 > Android开发

Android 双应用实例的一点记录

2020-03-06 15:23 1781 查看
1. 双实例的开关
Setting.java中有一个变量Settings.System.MULTI_PROCESS_ENABLED能动态运行时刻控制双实例功能,当其值为0时,系统会把之前启动的双实例进程都杀掉,而且之后就不能再通过给Intent传递特殊参数来启动双实例了。可以监听这个数据字段来对双实例的开关作出响应。
2. 启动从实例
目前设计的启动入口是用户从Launcher中点击从实例对应的图标。当点击第二个实例图标时,Launcher需要在Intent中携带“android.intent.extra.init_instance”这个额外变量,其值为1就表示需要启动从实例。不带这个额外变量或者其值为0表示启动主实例。
3. 主从实例任务管理
可以通过AMS暴露的getRecentTasks枚举到主从实例对应的任务,在返回的ActivityManager.RecentTaskInfo数据结构中增加了一项instanceId,其值为1表示从实例,为0表示主实例。
AMS的getTasks和getAppTasks函数则会根据调用进程是主实例还是从实例,返回不同的结果。简单的说就是主实例对应的进程只会看到主实例的任务列表,从实例对应的进程只会看到从实例的任务列表。
4. 查询进程是否属于从实例
在进程内部,可以通过Environment.getDataId函数的返回值来判断该进程是否属于从实例。返回值大于0表示这个进程属于从实例,为0表示属于主实例。
通过ActivityManagerNative.getDefault().getInstanceId函数的返回值就可以判断传入的进程(传入参数为进程号)是否属于从实例。返回值大于0表示这个进程属于从实例,为0表示属于主实例。
在ActivityManagerService模块内可以通过判断ProcessRecord对象实例的dataId值来判断对应进程是否属于从实例。值大于0表示这个进程属于从实例,为0表示属于主实例。
  • 点赞
  • 收藏
  • 分享
  • 文章举报
青石巷 发布了1 篇原创文章 · 获赞 0 · 访问量 170 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: