多用户多屏显示异常问题
问题: 多用户并显示多屏时,显示异常,某些activity只显示在default display上面。
情况一:在第二屏第二用户上长按某APP,选择app info,settings的activity会在display 0上显示出来。
情况二:APP里面调用其他activity,也会在默认显示屏上显示出来。
分析:原生android已经支持多用户显示多屏上,但支持还不够完善,比如这里的activity,以及相应的dialog,toast,均会显示在display 0上。
代码分析(情况一):
showAppDetailsAsUser --》startActivityAsUser–》executeRequest
startActivityAsUser中的/* resultTo= */ null,导致后续的executeRequest中的sourceRecord没有初始化,后续的startActivityUnchecked中的display被设置成了default display,也就是display 0
问题解决:
获取调用app的display的info,来设置当前启动activity的display info
在executeRequest中插入
+ int calling_displayID = INVALID_DISPLAY;
+ ActivityRecord callerRecord = null;
+ if(callerApp != null) {
+ callerRecord = callerApp.getConfigActivityRecord();
+ if(callerRecord != null) {
+ calling_displayID = callerRecord.getDisplayId();
+ }
+ }
+ if (calling_displayID != INVALID_DISPLAY && checkedOptions != null){
+ //call from APP property
+ if (calling_displayID != checkedOptions.getCallerDisplayId()) {
+ checkedOptions.setCallerDisplayId(calling_displayID);
+ }
+ } else if (sourceRecord == null) {
+ //call from APP internal
+ sourceRecord = callerRecord;
+ }
+
mLastStartActivityResult = startActivityUnchecked(r, sourceRecord, voiceSession,
request.voiceInteractor, startFlags, true /* doResume */, checkedOptions, inTask,