【发布时间】:2015-04-18 07:33:19
【问题描述】:
我在一些设备上测试了 HorizontalScrollView 的性能,发现了一些我没有预料到的东西。在性能应该相当不错的 GPU 上,比如 64 核 PowerVR G6230,滚动不像我在 1080p 中所期望的那样流畅。我在滚动时用 dumpsys 检查看到的是这样的:
0.64 2.54 0.82
0.65 2.35 0.81
0.71 2.12 10.37
0.79 2.18 27.93
0.42 1.12 0.71
0.62 1.36 0.42
0.54 1.32 0.41
0.47 1.28 0.40
0.42 1.13 0.68
0.44 1.06 0.59
0.40 1.11 0.70
1.52 2.18 0.93
0.70 2.12 0.81
0.67 2.31 0.81
0.66 2.35 0.81
0.65 2.44 0.81
1.00 2.00 0.99
0.67 2.33 0.81
0.81 2.02 0.89
1.33 1.98 0.82
0.65 2.34 0.81
1.42 2.01 0.81
1.79 2.15 0.83
0.67 2.35 0.82
0.66 2.37 0.82
0.65 2.31 0.80
0.64 2.34 0.81
0.65 2.43 0.80
0.98 2.00 6.06
1.61 1.99 0.83
0.66 2.37 0.82
0.76 2.33 0.81
0.64 2.35 0.82
0.65 2.50 0.81
0.63 2.33 0.81
0.65 2.32 0.80
1.31 1.98 0.81
0.73 2.34 0.81
1.26 2.04 0.81
0.66 2.42 0.81
0.63 2.33 0.80
0.64 2.30 0.81
0.62 2.37 0.80
0.62 2.30 0.80
0.64 2.30 0.80
7.77 16.80 1.47
0.52 6.15 0.47
0.41 1.33 0.35
这正是我所看到的:带有“中断”的流畅滚动,例如掉帧。谁对这些高价值有解释?
我已经能够通过禁用清单中的硬件加速并在我放置在滚动视图中的 ImageView 上启用绘图缓存来提高帧速率,但结果仍然不是我所期望的。知道为什么禁用 GPU 会带来更好的性能吗?
这是我在我的活动中放置的:
public static View getTestView(Context c) {
LinearLayout ll = new LinearLayout(c);
ll.setOrientation(LinearLayout.HORIZONTAL);
ll.setGravity(Gravity.CENTER_VERTICAL);
Bitmap b = BitmapFactory.decodeResource(c.getResources(), R.drawable.colors_1);
for (int i = 0; i < 200; i++) {
ImageView iv = new ImageView(c);
iv.setImageBitmap(b);
//iv.setDrawingCacheEnabled(true);
ll.addView(iv);
}
HorizontalScrollView sv = new HorizontalScrollView(c);
sv.addView(ll);
RelativeLayout rl = new RelativeLayout(c);
rl.addView(sv, new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT));
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
params.leftMargin = 0;
params.topMargin = 0;
rl.addView(new FpsImageView(c), params);
return rl;
}
我可以应用任何可能的优化来使滚动更好吗?也许这只是 GPU 能做的最好的事情? 谢谢!
【问题讨论】:
标签: android performance scrollview gpu