ActivityOptions options = ActivityOptions.makeBasic();
options.setLaunchStackId(FREEFORM_WORKSPACE_STACK_ID);
ActivityManagerService.startActivityFromRecents(int taskId, Bundle bOptions)
ActivityStackSupervisor.startActivityFromRecentsInner(...)
这里有几点需要说明:
- launchStackId就是设置的到移动到的stackid,例如要把app移动到freeform,这里的值就是2.
- task.stack.mStackId 这里的stackid就是要移动的app,当前的stackid,例如在移动前应用是处于全屏状态,那么这个值就是1.
- 如果launchStackId跟task.stack.mStackId的值不相同,那么就会就会执行到 moveTaskToStackLocked(…)方法中,这个方法就会修改应用的bounds(即修改要移动app的bounds),在这个方法中需要注意如果是全屏要移动到freeform,task.mBounds是null(因为我们在计算fullscreen时,它的bounds是null,可以这么说全屏应用的bounds就是null),这时会自动获取一个bounds,来根据这个计算要修改应用最终的bounds,如果app的上一个应用状态是从分屏进入到的全屏,在修改成freeform,这个bounds就会是全屏大小,这时显示就会异常,一定要给一个默认的显示bounds值。。。。