屏幕点亮后壁纸黑屏一瞬 您所在的位置:网站首页 黑屏显示时间软件下载不了 屏幕点亮后壁纸黑屏一瞬

屏幕点亮后壁纸黑屏一瞬

2023-06-08 01:32| 来源: 网络整理| 查看: 265

1.通过现象其他systemui还在只是壁纸部分所在的背景黑了一瞬定位是壁纸问题

2.观察壁纸有关log:

行 240: 05-14 03:54:15.295 1512 1512 D ImageWallpaper: onAmbientModeChanged: inAmbient=false, duration=500, mShouldStopTransition=false 行 243: 05-14 03:54:15.296 1512 1641 V ImageWallpaperRenderer: onRevealStart: start, anim=true 行 244: 05-14 03:54:15.296 1512 1641 D ImageWallpaper: preRender start 行 245: 05-14 03:54:15.301 1512 1641 D ImageWallpaper: preRender end 行 246: 05-14 03:54:15.301 1512 1641 V ImageWallpaperRenderer: onRevealStart: done 行 253: 05-14 03:54:15.817 1512 1641 V ImageWallpaperRenderer: onRevealEnd: start, mScissorMode=true 行 254: 05-14 03:54:15.830 1512 1641 D ImageWallpaper: postRender start 行 255: 05-14 03:54:15.830 1512 1641 D ImageWallpaper: postRender end 行 256: 05-14 03:54:15.830 1512 1641 V ImageWallpaperRenderer: onRevealEnd: done

定位大概位置ImageWallpaper: 用于绘制壁纸

3.ImageWallpaper: requestRender()用于绘制壁纸开机时绘制一次 其余点亮屏幕时最终也会走到这里

@Override public void requestRender() { // This method should only be invoked from worker thread. Trace.beginSection("ImageWallpaper#requestRender"); requestRenderInternal(); Trace.endSection(); } private void requestRenderInternal() { Rect frame = getSurfaceHolder().getSurfaceFrame(); boolean readyToRender = mEglHelper.hasEglContext() && mEglHelper.hasEglSurface() && frame.width() > 0 && frame.height() > 0; if (readyToRender) { mRenderer.onDrawFrame(); if (!mEglHelper.swapBuffer()) { Log.e(TAG, "drawFrame failed!"); } } else { Log.e(TAG, "requestRender: not ready, has context=" + mEglHelper.hasEglContext() + ", has surface=" + mEglHelper.hasEglSurface() + ", frame=" + frame); } }

4.打了个堆栈log发现 会走两次绘制 第二次的调用是在ImageWallpaperRenderer: onRevealStateChanged()

@Override public void onRevealStateChanged() { // mProxy.requestRender(); }

尝试去掉,问题解决 5. 网上查询关于第二次绘制的说法,在某些情况下,当屏幕从全屏幕模式切换回来时,壁纸会没有及时地刷新,导致画面显示异常。 为了避免这种情况,Android 系统通常会使用 onRevealStateChanged 回调来检测屏幕状态变化,并重新渲染壁纸。 因此,在 onRevealStateChanged 中重复渲染一次壁纸,可以确保壁纸呈现正确,但如果不需要实时刷新壁纸,也可以将其放在单独的方法中,在恰当的时候调用它并重新绘制壁纸。 考虑到这种异常状况发生概率微乎其微,如果壁纸界面能够及时响应用户的操作而没有呈现异常,也就是不需要再重新渲染一次壁纸 所以去掉。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有