android 8.0+ 设备上出现渲染错误的问题

问题已报github
https://github.com/cocos2d/cocos2d-x/issues/20424

重现方法
3.17.2新建lua项目
接入某渠道SDK(sdk初始化必须在onCreate中执行,sdk一初始化就会触发AppActivity的onPause)
唯一的lua文件如下:

--cc.c3b,cc.c4b,cc.p要定义一下,此处省略
function main()
    local scene = cc.Scene:create()
    local layer = cc.LayerColor:create(cc.c4b(255,255,255,255))
    scene:addChild(layer)

    print("before createWithTTF is Called xxxxx")
    local str = "ABCDEFG"
    local txt = cc.Label:createWithTTF(str,"fnt.ttf",32)
    txt:setColor(cc.c3b(0,0,0))
    txt:setPosition(cc.p(500,100))
    scene:addChild(txt)

    cc.Director:getInstance():runWithScene(scene) --白色背景上显示黑色字体ABCDEFG
    print("runWithScene Called xxxxx")

    local delay = cc.DelayTime:create(5)
    local sequence = cc.Sequence:create(delay, cc.CallFunc:create(
        function()
            layer:setOpacity(128)
            txt:setString("AB") --5秒后将字体设置为AB,layer变成半透明
            print("setString xxxxx")
        end))
    layer:runAction(sequence)
end

main()

在windows以及安卓8.0以下的设备上,运行的效果是正常的:
1.启动时:

2.过5秒后:

但是在安卓8.0+的真机上,启动时正常,五秒后显示如下:

我仔细检查了日志,原因应该是由于渠道SDK启动的时候Pause了AppActivity,而nativePause被调用会晚一些时间,导致labelTTF的创建是在AppActivity被pause的期间进行的。
如果不初始化SDK,onPause不被调用,那么是正常的不会有显示错误。

2019-12-24 15:58:03.554 D/AppActivity onCreate Called
2019-12-24 15:58:05.076 D/AppActivity onResume Called
2019-12-24 15:58:05.076 D/Cocos2dxActivity: onResume()
2019-12-24 15:58:05.302 D/Cocos2dxRenderer onSurfaceCreated
2019-12-24 15:58:05.737 D/AppActivity onPause Called
2019-12-24 15:58:05.737 D/Cocos2dxActivity: onPause()
2019-12-24 15:58:06.407 D/cocos2d-x debug info: [LUA-print] 15:58:06 before createWithTTF is Called
2019-12-24 15:58:06.628 D/cocos2d-x debug info: [LUA-print] 15:58:06 runWithScene Called
2019-12-24 15:58:06.901 D/Cocos2dxRenderer Cocos2dxRenderer.nativeInit Done
2019-12-24 15:58:06.932 D/Cocos2dxRenderer handleOnPause Called
2019-12-24 15:58:09.210 D/AppActivity: onResume Called
2019-12-24 15:58:14.297 D/cocos2d-x debug info: [LUA-print] setString Called

可以看到,在onPause和onResume之间,lua创建labelTTF的行为被执行

所以现在的情况是,
如果lua代码一启动就创建渲染相关的对象,
并且AppActivity一onCreate就触发onPause,
那么很可能被创建的渲染对象会出问题。

麻烦开发者可否研究下该问题,看看有无解决方案,多谢~

实现思路问题

能详细说下吗?

github上已有方案回复。
https://github.com/cocos2d/cocos2d-x/issues/20424