我注意到,与较旧的Nexus 5(棉花糖6.0.1)相比,Nexus 5X(奥利奥8.1.0)在某种布局上的通货膨胀时间最多长3倍。
布局如下图所示。如图所示,布局实际上被标记为GONE
,直到用户单击并显示出来。但是,所测量的布局时间并未揭示布局的“消失”部分。
<RelativeLayout>
<TextView/>
<ImageView/>
<LinearLayout>
<ImageView/>
<Space></Space>
<ImageView/>
<Space></Space>
<ImageView/>
<Space></Space>
<ImageView/>
<Space></Space>
<ImageView/>
<Space></Space>
<ImageView/>
<Space></Space>
<ImageView/>
</LinearLayout>
<View/>
<View/>
<LinearLayout> <---- marked as .GONE !!!
<LinearLayout>
<androidx.cardview.widget.CardView>
<ImageButton/>
</androidx.cardview.widget.CardView>
<Space></Space>
<androidx.cardview.widget.CardView>
<ImageButton/>
</androidx.cardview.widget.CardView>
<Space></Space>
<androidx.cardview.widget.CardView>
<ImageButton/>
</androidx.cardview.widget.CardView>
<Space></Space>
<androidx.cardview.widget.CardView>
<ImageButton/>
</androidx.cardview.widget.CardView>
</LinearLayout>
<LinearLayout>
<TextView/>
<Space></Space>
<TextView/>
<Space></Space>
<TextView/>
<Space></Space>
<TextView/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
使用事件探查器,我得到以下信息:
Nexus 5
RecyclerView.OnCreateViewHolder
花费〜19ms
并仅衡量
TextView
大约需要1.2毫秒
同时
Nexus 5X
RecyclerView.OnCreateViewHolder
大约需要60毫秒
TextView
大约需要4毫秒
我已经附加了探查器的屏幕截图。
我的问题是:我可以对此做些什么吗?
我尝试将其全部转换为ConstraintLayout,然后情况变得更糟!
编辑:
我应该提到RecyclerView
嵌入在ViewPager
中,我担心的原因显然是,在Nexus 5X上实例化ViewHolders(其中的7个)花费了很长时间,以至于用户遇到这种情况,因为用户界面受阻。
其他与项目相关的信息:
minSdkVersion 23
targetSdkVersion 28
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'com.google.android.material:material:1.0.0'
}