我尝试在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;
}