У меня есть 2 фрагмента, один из которых позволяет пользователю выбрать длинный текстовый файл (до 3 МБ), а другой - отображает текст в текстовом представлении в виде вложенной прокрутки. Я полагаю, что проблема заключается в заданной текстовой функции, так как весь текст отображается одновременно и приводит к зависанию системы примерно на 5 секунд. Я хотел бы быть в состоянии сделать это более эффективно.
Я пытался использовать веб-просмотр для отображения текста, поскольку он отображает только то, что ему нужно, но мне интересно, если это можно сделать в текстовом представлении, я довольно новичок в Android Studio, и это для стороннего проекта.
Метод чтения кода:
private String strBuilderWithChars( String fileName ) throws IOException {
InputStream input = Objects.requireNonNull(getActivity()).getAssets().open("Books/" + fileName);
Reader reader = new InputStreamReader(input, StandardCharsets.UTF_8);
StringBuilder sb = new StringBuilder();
char[] buffer = new char[16384]; //16k
int len; // how much content was read?
while( ( len = reader.read( buffer ) ) > 0 ) {
sb.append( buffer, 0, len );
}
reader.close();
return sb.toString();
}
Фрагмент, отображающий код:
public class HomeFragment extends Fragment {
private TextView main_text;
public HomeFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_home, container, false);
main_text = v.findViewById(R.id.current_book_texview);
return v;
}
public void updateBookInDisplay(String book_text) {
main_text.setText(book_text);
}
}
Я получаю I / Choreographer: приложение может выполнять слишком много работы с предупреждением о главном потоке, когда приложение работает и пропускает около 300 кадров.