关于android:View的Temporary-Detach状态

View的Temporary Detach状态

探索TemporaryDetachDetach的关系

切入点

起因是在剖析RecyclerView缓存机制时,在类正文形容的Scrap中,提到了处于temporary detached状态的View

间接在View办法表中搜寻temporary可发现一系列办法。

源码剖析

对于View来说:

通过比照dispatchStartTemporaryDetachdispatchDetachedFromWindow

public void dispatchStartTemporaryDetach() {
    mPrivateFlags3 |= PFLAG3_TEMPORARY_DETACH;
    notifyEnterOrExitForAutoFillIfNeeded(false);
    notifyAppearedOrDisappearedForContentCaptureIfNeeded(false);
    onStartTemporaryDetach();
}

void dispatchDetachedFromWindow() {
    ...
    notifyEnterOrExitForAutoFillIfNeeded(false);
    notifyAppearedOrDisappearedForContentCaptureIfNeeded(false);
}

能够发现前者是后者是轻量级操作,只做了一小部分解决,简直没什么影响。onStartTemporaryDetach办法正文中提到了ViewGroup#detachViewFromParent(View),咱们转移到剖析ViewGroup

protected void detachViewFromParent(View child) {
    child.setDetached(true);
    removeFromArray(indexOfChild(child));
}

ViewGroup的视角下,Detach对应removeView,比照detachViewFromParentremoveView,能够发现,也是属于轻量级操作,只是简略的从视图层级构造中移除了。

论断

TemporaryDetachDetach的轻量级操作,益处是期间不参加layoutdrawmeasure三大流程

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理