view.invalidate():
当ActivityB在ActivityA下面,刷新ActivityB的页面时,能否刷新成功?
不能。因为设置了跳过(skipinvalidate图2),页面不可见时UI是不会刷新的
invalidate调用invalidateInternal()
图1
图2
之后设置标志位mprivateFlags判断是否刷新,然后调用父布局(viewgroup)的invalidatechild,不能每个view单独刷新,gpu会乱套,所以丢给它的parent统一管理
view刷新有两种:硬件个软件
webview是硬件加速丢给GPU为了快速刷新
view刷新的本质与事件分发相同:先由子view确认刷新范围然后传父view,父view在判断它们的交集也就是子view所在的区域再依次往上,最后到viewRootImpl,之后再往下分发