開啟硬體加速 導致花屏問題 OpenGlRenderer 0x506 解決辦法
阿新 • • 發佈:2019-01-25
(150114_17:08:32.461)I/dalvikvm-heap( 850): Grow heap (frag case) to 10.342MB for 2457616-byte allocation (150114_17:08:32.542)D/dalvikvm( 850): GC_FOR_ALLOC freed 20K, 25% free 10530K/14040K, paused 34ms, total 34ms (150114_17:08:32.551)D/dalvikvm( 850): GC_CONCURRENT freed 7K, 26% free 10524K/14040K, paused 1ms+5ms, total 24ms (150114_17:08:32.551)D/OpenGLRenderer( 850): GL error from OpenGLRenderer: 0x506
android4.2版定製的Launcher, 有機率出現應用整個繪製成花屏、黑屏或者字型繪製成方塊等問題,出現花屏問題的時候出現以上LOG
解決辦法:
當View 呼叫destroyLayer()的時候判斷如果當前的硬體加速不可用的時候,呼叫mHardwareRenderer的safelyRun來刪除mHardwareLayer的資源
修改View.java destroyLayer(boolean valid)方法
boolean destroyLayer(boolean valid) { if (mHardwareLayer != null) { AttachInfo info = mAttachInfo; if (info != null && info.mHardwareRenderer != null && info.mHardwareRenderer.isEnabled() && (valid || info.mHardwareRenderer.validate())) { info.mHardwareRenderer.cancelLayerUpdate(mHardwareLayer); mHardwareLayer.destroy(); mHardwareLayer = null; invalidate(true); invalidateParentCaches(); } else if(info != null && info.mHardwareRenderer != null) { info.mHardwareRenderer.safelyRun(new Runnable() { @Override public void run() { // TODO Auto-generated method stub mHardwareLayer.destroy(); mHardwareLayer = null; if (mDisplayList != null) mDisplayList.reset(); invalidate(true); invalidateParentCaches(); } }); } return true; } return false; }