我尝试在 Android 应用程序中使用 TextView 显示长文本(最大约 300 KB),并且 Nexus 7 上的性能很糟糕(大约 10 秒)。文本是可滚动的,因此我们将其分成更小的部分并尝试在 ListView 中显示它们(使用 ViewHolder 模式)。性能提高了,但滚动动画仍然非常不稳定。实际上,纯文本的性能是不可接受的(Nexus 7 不是最慢的设备),但最终我们将使用样式文本(使用 SpannableString),这将完全破坏性能。
我在下面显示 systrace 屏幕(实际上是链接,很抱歉,但我没有上传图片的声誉:)):
我知道文本渲染是一项不平凡的任务,但 iOS 完美地处理了它,那么为什么 Android 不能呢?这个问题有什么合理的解决方案吗?
启用硬件加速。
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.element_item_layout, parent, false);
//element_item_layout file is/contains only one TextView, as below
holder.textView = (TextView) convertView.findViewById(R.id.element_item_textview);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
holder.textView.setText(getItem(position).longText);
return convertView;
}
private class ViewHolder {
public TextView textView;
}