Я пытаюсь отобразить длинный текст с помощью TextView в приложении для Android (максимум около 300 КБ), и производительность на 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;
}
setText
для элемента без фиксированных размеров на удивление дорог: stackoverflow.com/questions/10804436/ Таким образом, я рекомендую убедиться, что все TextViews имеют фиксированные layout_width и layout_height. Это должно хотя бы немного помочь. - person VinceFior   schedule 17.03.2016