Android 双应用实例的一点记录

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表示属于主实例。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值