车机车载氢桌面的画中画功能技术调研部分

背景:

近期有的粉丝朋友有请教到一个关于车机系统上画中画的相关功能实现问题,目前他的车机有一个叫做氢桌面的软件,氢桌面是有相关的画中画的功能,具体展示如下:
在这里插入图片描述
在这里插入图片描述
明显可以
上面图片可以看出确实这个氢桌面是可以实现多个app的Activity并行运行的功能。
那么粉丝朋友们就对这个氢桌面是如何实现这种多任务并行即画中画功能的呢?他的实现原理是什么呢?

通过dumpsys输出调研实现原理

dumpsys的场景:

在氢桌面上运行两个不同的Activity即并行执行两个应用的Activity
然后再执行如下两个dumpsys命令:

1、dumpsys window windows (主要目的是dump出当前设备上所有窗口的情况,并行的两个Activity就可以通过窗口查看出相关的情况)

2、dumpsys display (主要目的是来展示想的display相关的信息)

dumpsys window windows查看如下:
在这里插入图片描述
明显可以看出来,有两个Activity的窗口对应的displayId并不是0,而是10和11.
看到这里大家心里应该也是大概知道了氢桌面画中画的一个原理,本质上实现的方案就是采用了多个虚拟屏,也就是和原来的ActivityView是一个原理,一个ActivityView上面就装载一个虚拟屏幕,这些要并行的Activity都是启动到对应的虚拟屏幕上面既可以。

再通过dumpsys display来再次验证上面的分析
重点看看displayId= 10和11的情况

  Display 10:
    mDisplayId=10
    mLayerStack=10
    mHasContent=true
    mRequestedMode=0
    mRequestedColorMode=0
    mDisplayOffset=(0, 0)
    mPrimaryDisplayDevice=MyActivityViewVirtualDisplay@255965297
    mBaseDisplayInfo=DisplayInfo{"MyActivityViewVirtualDisplay@255965297", uniqueId "virtual:com.mcar.auto.uid,1000,MyActivityViewVirtualDisplay@255965297,0", app 676 x 636, real 676 x 636, largest app 676 x 636, smallest app 676 x 636, mode 73, defaultMode 73, modes [{id=73, width=676, height=636, fps=60.0}], colorMode 0, supportedColorModes [0], hdrCapabilities null, rotation 0, density 160 (160.0 x 160.0) dpi, layerStack 10, appVsyncOff 0, presDeadline 16666666, type VIRTUAL, state OFF, owner com.mcar.auto.uid (uid 1000), removeMode 1}
    mOverrideDisplayInfo=DisplayInfo{"MyActivityViewVirtualDisplay@255965297", uniqueId "virtual:com.mcar.auto.uid,1000,MyActivityViewVirtualDisplay@255965297,0", app 676 x 636, real 676 x 636, largest app 676 x 676, smallest app 636 x 636, mode 73, defaultMode 73, modes [{id=73, width=676, height=636, fps=60.0}], colorMode 0, supportedColorModes [0], hdrCapabilities null, rotation 0, density 160 (160.0 x 160.0) dpi, layerStack 10, appVsyncOff 0, presDeadline 16666666, type VIRTUAL, state ON, owner com.mcar.auto.uid (uid 1000), removeMode 1}
  Display 11:
    mDisplayId=11
    mLayerStack=11
    mHasContent=true
    mRequestedMode=0
    mRequestedColorMode=0
    mDisplayOffset=(0, 0)
    mPrimaryDisplayDevice=MyActivityViewVirtualDisplay@241839220
    mBaseDisplayInfo=DisplayInfo{"MyActivityViewVirtualDisplay@241839220", uniqueId "virtual:com.mcar.auto.uid,1000,MyActivityViewVirtualDisplay@241839220,0", app 1149 x 636, real 1149 x 636, largest app 1149 x 636, smallest app 1149 x 636, mode 74, defaultMode 74, modes [{id=74, width=1149, height=636, fps=60.0}], colorMode 0, supportedColorModes [0], hdrCapabilities null, rotation 0, density 160 (160.0 x 160.0) dpi, layerStack 11, appVsyncOff 0, presDeadline 16666666, type VIRTUAL, state OFF, owner com.mcar.auto.uid (uid 1000), removeMode 1}
    mOverrideDisplayInfo=DisplayInfo{"MyActivityViewVirtualDisplay@241839220", uniqueId "virtual:com.mcar.auto.uid,1000,MyActivityViewVirtualDisplay@241839220,0", app 1149 x 636, real 1149 x 636, largest app 1149 x 1149, smallest app 636 x 636, mode 74, defaultMode 74, modes [{id=74, width=1149, height=636, fps=60.0}], colorMode 0, supportedColorModes [0], hdrCapabilities null, rotation 0, density 160 (160.0 x 160.0) dpi, layerStack 11, appVsyncOff 0, presDeadline 16666666, type VIRTUAL, state ON, owner com.mcar.auto.uid (uid 1000), removeMode 1}

明显从

DisplayInfo{“MyActivityViewVirtualDisplay@241839220”, uniqueId “virtual:com.mcar.auto.uid,1000,MyActivityViewVirtualDisplay@241839220,0”

这些信息也可以再次确定其实就是创建了对应的虚拟屏幕,这些虚拟屏幕就是ActivityView自带创建的,然后其他的Activity就可以启动到这个虚拟屏幕上,从而实现画中画等Activity并行功能。

在这里插入图片描述

更多framework手机车机干货技术,请关注公zhong号“千里马学框架”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值