我有一项活动可以测量布局的动画/布局/度量/等时间。
class RenderingMeasureActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.skeleton)
val view = layoutInflater.inflate(R.layout.simple, root, false)
root.postDelayed({
root.addView(view)
}, 5000)
}
}
骨骼布局不过是FrameLayout
,其中match_parent
和id为root
。简单的布局就是:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="ahoj"
android:textSize="32sp" />
</FrameLayout>
在活动中,我延迟了addView()
,因此我确定自己正在对此进行衡量,并且没有其他影响。
现在,无论我做什么,测量结果都超出了图表。它至少需要17毫秒(平均更像25毫秒),这是JANK的明确来源(> 16.7毫秒)。最长的持续时间是“命令问题”,我从FrameMetrics
,gpu分析栏获得的结果相同,并且从 systrace 获得的结果也相似。
我在做什么错? 任何布局的addView
(或inflate
)是否可能是如此昂贵以至于Android SDK应用将始终具有JANK?为什么如果在setContentView()
中设置了相同的布局(合并为一个),则花费的时间更少(虽然不是很多)?
P.S .:我尝试了其他布局,例如约束,线性,相对。合并标签有助于一点,但并不总是可用。
P.P.S .:以编程方式创建布局没有效果,因为我将膨胀部分分开了。