本文重点分析InputFlinger的实现。
验证环境:Google Pixel4手机
1 焦点APP和Window根据参考资料[1]第1.1小节的分析可知,若当前存在焦点APP,但5s内都没有焦点Window,则将会触发ANR。焦点APP和Window在底层中分别由mFocusedApplicationHandlesByDisplay和mFocusedWindowTokenByDisplay两个变量维护,本节对其设置流程进行分析。
1.1 mFocusedApplicationHandlesByDisplayJava层通过JNI将当前聚焦的APP下发给Native层的InputFlinger,Native层将其存到mFocusedApplicationHandlesByDisplay变量中:
ActivityRecord.onDisplayChanged(DisplayContent dc)
|-->if (prevDc.mFocusedApp == this)
|-->prevDc.setFocusedApp(null)
|-->if (dc.getTopMostActivit


