Mr.Alright---Google强制竖屏的应用横屏状态下进入最近任务,taskview显示异常

问题:Google强制竖屏的应用横屏状态下进入最近任务,taskview显示异常

步骤:

  1. 打开屏幕自动旋转
  2. 打开一个设置了强制竖屏的应用
  3. 将手机旋转成横向
  4. 调出最近任务页面,查看当前应用在最近任务的显示

 

这个问题主要是recent是横屏,所以会触发configuration change, 导致talkinggingerfree的bound变成(0, 0 - 2280, 1080),而做shapshot的时候,又用的是这个bounds,所以导致出错:

    Line 753: 05-09 17:37:42.679012  1042  1062 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.outfit7.talkinggingerfree/com.outfit7.talkingginger.Main bnds=[640,1396][839,1718]} from uid 10093

    Line 6057: 05-09 17:37:47.188711  1042  2382 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher3/.Launcher (has extras)} from uid 10093

    Line 13298: 05-09 17:37:47.469346  1042  2382 W WindowManager: onConfigurationChanged,this:{taskId=8 appTokens=[AppWindowToken{8f0f3c token=Token{18eb10d ActivityRecord{978875b u0 com.outfit7.talkinggingerfree/com.outfit7.talkingginger.Main t8}}}] mdr=false},hasWindowsAlive():true,newParentConfig:{1.0 ?mcc?mnc [en_US] ldltr sw360dp w684dp h332dp 480dpi nrml long land finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 - 2280, 1080) mAppBounds=Rect(84, 0 - 2136, 1080) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=standard mAlwaysOnTop=undefined mRotation=ROTATION_90} s.132}

    Line 13299: 05-09 17:37:47.469656  1042  2382 W WindowManager: onConfigurationChanged  getBounds():Rect(0, 0 - 2280, 1080)

    Line 14263: 05-09 17:37:47.486717  1042  2382 W WindowManager: [mtk]createTaskSnapshot: {taskId=8 appTokens=[AppWindowToken{8f0f3c token=Token{18eb10d ActivityRecord{978875b u0 com.outfit7.talkinggingerfree/com.outfit7.talkingginger.Main t8}}}] mdr=false},buffer.getWidth(): 2280,buffer.getHeight(): 1080,mTmpRet:Rect(0, 0 - 2280, 1080)

 

如果是按home key退出,再接recent进入,因为不会有竖屏到横屏的切换,所以shapshot的时候,下的是竖屏的rect: (0, 0 - 1080, 2280),这样是没有问题的:
    Line 29447: 05-09 17:37:17.305332  1042  1748 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.outfit7.talkinggingerfree/com.outfit7.talkingginger.Main bnds=[640,1396][839,1718]} from uid 10093
    Line 45059: 05-09 17:37:34.355339  1042  1064 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.android.launcher3/.Launcher (has extras)} from uid 0
    Line 47169: 05-09 17:37:34.430870  1042  1067 W WindowManager: [mtk]createTaskSnapshot: {taskId=8 appTokens=[AppWindowToken{8f0f3c token=Token{18eb10d ActivityRecord{978875b u0 com.outfit7.talkinggingerfree/com.outfit7.talkingginger.Main t8}}}] mdr=false},buffer.getWidth(): 1080,buffer.getHeight(): 2280,mTmpRet:Rect(0, 0 - 1080, 2280)

 

解决:

  在alps/frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java

if (mWindowManager != null) {
            mWindowManager.deferSurfaceLayout();
        }
        try {
            if (values != null) {
                // ++++++++++++ start
                kept = ensureConfigAndVisibilityAfterUpdate(starting, changes);
                //  ++++++++++++ end

                if (displayId == DEFAULT_DISPLAY) {
                    // Override configuration of the default display duplicates global config, so
                    // we're calling global config update instead for default display. It will also
                    // apply the correct override config.
                    changes = updateGlobalConfigurationLocked(values, false /* initLocale */,
                            false /* persistent */, UserHandle.USER_NULL /* userId */, deferResume);
                } else {
                    changes = performDisplayOverrideConfigUpdate(values, deferResume, displayId);
                }
            }

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值