Нужна помощь для оптимизации следующего кода Java. Это код для настройки цвета определенных ключевых слов в текстовом представлении.(Приложение для Android)

Я разрабатываю приложение для просмотра C-программ. Я хотел дать простую цветовую схему тексту, который хранится в базе данных, извлекается в виде строки и затем передается в текстовое представление.

Код, который я написал, назначает зеленый цвет объявлениям и заголовкам файла заголовка, синий цвет - номерам, printf, scanf... красный - типам данных, таким как int, char, float.

Это, однако, очень неэффективно. До применения этой цветовой схемы мое приложение мгновенно отображало активность просмотра текста. Теперь, в зависимости от продолжительности программ, это может занять от 4 до 5 секунд, что является действительно низкой производительностью.

то, что он делает, это берет одно ключевое слово за раз, затем выполняет итерацию полного текста textview, ища только это конкретное ключевое слово, и изменяет его цвет, устанавливает текст снова. Таким образом, он пересекает текст всего текстового просмотра 29 раз, поскольку я определил 29 ключевых слов в массивах строк (а именно: ключевые слова - зеленый, ключевые слова - синий, ключевые слова - красный).

Функция onCreate действия содержит следующий код:

        textView  = (TextView) findViewById(R.id.textView1);
        textView.setText(programtext);
        textView.setBackgroundColor(0xFFE6E6E6);

        //The problem stars here

        String [] keywordsgreen={"#define","#include","stdio.h","conio.h","stdlib.h","math.h","graphics.h","string.h","malloc.h","time.h","{","}","(",")","<",">","&","while ","for "};
        for(String y:keywordsgreen)
        {
        fontcolor(y,0xff21610B);
        }

        String [] keywordsred={"%d","%f","%c","%s","int ","char ","float","typedef","struct ","void "};
        for(String y:keywordsred)
        {
        fontcolor(y,0xFFB40404);
        }

        String [] keywordsblue={"printf","scanf","\n","getch","0","1","2","3","4","5","6","7","8","9"};
        for(String y:keywordsblue)
        {
        fontcolor(y,0xFF00056f);
        }

Функция fontcolor выглядит следующим образом:

private void fontcolor(String text,int color) 
    {
        Spannable raw=new SpannableString(textView.getText());
        int index=TextUtils.indexOf(raw, text);
        while (index >= 0) 
        {
          raw.setSpan(new ForegroundColorSpan(color), index, index + text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
          index=TextUtils.indexOf(raw, text, index + text.length());
        }
        textView.setText(raw);
    }

0 ответов

Другие вопросы по тегам