本文主要是介绍Android bug——Launcher 0x506导致花屏问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
现象描述:
在Android4.4中,概率极高会出现Launcher或者应用整个绘制成花屏、黑屏或者字体绘制成方块等问题,出现花屏问题的时候将会在hwui中打印0x506的错误。
分析:
通过log发现也只有hwui中出现0x506这个错误码,即hwui中当前绘图时使用的fbo是无效的。接着通过分析代码发现当前hwui中使用fbo的地方为LayerRenderer中,在LayerRenderer中使用到fbo的地方也就是当view中需要创建HardwareLayer的时候,将会调用LayerRenderer将view绘制的信息通过fbo保存在纹理中:
status_tLayerRenderer::prepareDirty(float left, float top, float right, float bottom,
bool opaque) {
glBindFramebuffer(GL_FRAMEBUFFER,mLayer->getFbo());
…………
returnOpenGLRenderer::prepareDirty(dirty.left, dirty.top, dirty.right, dirty.bottom,opaque);
}
Layer*LayerRenderer::createLayer(uint32_t width, uint32_t height, bool isOpaque) {
Caches& caches = Caches::getInstance();
GLuint fbo = caches.fboCache.get();
…………
caches.activeTexture(0);
Layer* layer = caches.layerCache.get(width,height);
…………
layer->setFbo(fbo);
…………
GLuint previousFbo;
glGetIntegerv(GL_FRAMEBUFFER_BINDING,(GLint*) &previousFbo);
glBindFramebuffer(GL_FRAMEBUFFER,layer->getFbo());
这篇关于Android bug——Launcher 0x506导致花屏问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!