在高通android p的平台上,一个第三方的apk设置为默认的桌面后(或在开机向导界面),在无锁屏的情况下,休眠后马上按电源键唤醒,比较大的概率出现点击或滑动界面无反应,通过调试后发现ViewRootImpl.java中的draw()方法中返回后造成的
private boolean draw(boolean fullRedrawNeeded) {
Surface surface = mSurface;
if (!surface.isValid()) { //快速休眠唤醒后view调用到这里会直接返回
return false;
}
}
在网上查到说是google的一个path造成的。
解决这个问题可按如下修改
void setWindowStopped(boolean stopped) {
if (mStopped != stopped) {
mStopped = stopped;
final ThreadedRenderer renderer = mAttachInfo.mThreadedRenderer;
if (renderer != null) {
if (DEBUG_DRAW) Log.d(mTag, "WindowStopped on " + getTitle() + " set to " + mStopped);
renderer.setStopped(mStopped);
}
if (!mStopped) {
scheduleTraversals();
} else {
if (renderer != null) {
renderer.destroyHardwareResources(mView);
}
}
for (int i = 0; i < mWindowStoppedCallbacks.size(); i++) {
mWindowStoppedCallbacks.get(i).windowStopped(stopped);
}
// 屏蔽以下的代码即可,如下所示
/*if (mStopped) {
mSurface.release();
}*/
}
}
来源:CSDN
作者:NullException!!!!
链接:https://blog.csdn.net/u010867436/article/details/103613597