LG V20 AOSP第二屏开发:SIGNBOARD窗口无显示问题求助
Troubleshooting Blank Second Screen for LG V20 AOSP 7.1 Port
我之前在把LG V20的第二屏功能移植到AOSP 7.1的时候,也遇到过一模一样的“第二屏全空”问题——毕竟7.0到7.1的系统框架确实有不少细节变动。结合你已经完成的操作(LogicalDisplay偏移设置、新增SIGNBOARD窗口类型),给你几个针对性的排查方向:
窗口类型的系统注册与权限校验
7.1对窗口类型的管控比7.0严格不少,你新增的SIGNBOARD类型不能只定义就完事:- 要在
WindowManagerPolicy或者WindowManagerService的窗口类型注册逻辑里添加这个类型,确保系统能识别它是属于第二屏专用的窗口类型。 - 检查权限配置:不管是系统应用还是第三方应用要使用这个窗口,都得确保权限到位——比如
android.permission.SYSTEM_ALERT_WINDOW,而且7.1里权限校验的逻辑有微调,别漏了在checkPermission相关代码里适配这个新类型。
- 要在
LogicalDisplay偏移的同步逻辑
你设置了偏移量避免主内容溢出,但7.1的DisplayManagerService对多屏配置的同步机制变了:- 去检查
DisplayAdapter里的第二屏物理参数识别逻辑,确保偏移量被正确传递到底层显示输出模块,而不是只停留在LogicalDisplay的上层配置里。 - 确认
DisplayInfo的更新通知有没有触达WindowManagerService,7.1里Display状态变更的广播/回调逻辑有调整,要是同步不及时,系统可能根本没把第二屏当成可用的显示区域。
- 去检查
SIGNBOARD窗口的绑定与初始化
参考LG 7.0的实现时,注意7.1的DisplayContent管理逻辑不一样:- 要确保
SIGNBOARD类型的窗口被明确绑定到第二屏的DisplayId上,别让它默认挂载到主屏幕。检查窗口的LayoutParams里displayId参数是否正确设置为第二屏的ID。 - 确认
WindowManagerService在创建SIGNBOARD窗口时,把它分配到了第二屏对应的DisplayContent实例中,7.1里多屏的DisplayContent隔离更严格,错配的话窗口根本不会渲染到第二屏。
- 要确保
底层SurfaceFlinger与HAL适配
7.1对多屏渲染的底层逻辑做了优化,LG 7.0的驱动适配代码可能不适配:- 查看
SurfaceFlinger的日志,检查是否有第二屏对应的Layer创建记录,7.1里多屏Layer的渲染目标绑定逻辑变了,要是没适配,就算窗口创建了也不会输出到第二屏。 - 确认HAL层的
display_hw_module_t接口是否兼容7.1,有些7.0的HAL实现在7.1里会因为接口变更导致第二屏初始化失败,这时候上层再怎么配置都没用。
- 查看
日志排查的关键节点
最后给你个实用技巧:抓日志重点看这几个模块:DisplayManagerService:搜索DisplayAdded、DisplayInfo关键词,确认系统真的识别到了第二屏的存在。WindowManagerService:搜你新增的SIGNBOARD,看有没有“permission denied”或者“window add failed”的报错。SurfaceFlinger:查第二屏的Layer渲染日志,看是否有“no output target”之类的提示。
内容的提问来源于stack exchange,提问作者TheWanderer
相关产品推荐
相关产品推荐

