Как можно более эффективно отобразить длинный фрагмент текста в текстовом представлении? - PullRequest
0 голосов
/ 22 мая 2019

У меня есть 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 кадров.

...