Передача контекста без необходимости.Это дорого? - PullRequest
0 голосов
/ 14 ноября 2018

Итак, у меня есть этот метод getSpecialCharacter, который вызывается из множества различных действий.

public static Spanned getSpecialCharacter(Context context){
    Spanned spanned_character = CacheFactory.spannedCache.get("green");
    if (spanned_character ==null) {
        spanned_character = getSymbolColor(context, " \uf100", Color.GREEN);
        CacheFactory.spannedCache.put("green", spanned_character);
    }
    return spanned_character;
}

private static Spanned getSymbolColor(Context context, String s_symbol, int color){
    Typeface font = Typeface.createFromAsset(context.getAssets(), "font.ttf");
    SpannableString ss = new SpannableString(s_symbol);
    ss.setSpan (new CustomTypefaceSpan(font), 0, s_symbol.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    ss.setSpan(new ForegroundColorSpan(color), 0, s_symbol.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    return ss;
}

Он в основном устанавливает специальный символ из загруженного шрифта и применяет зеленый цвет. Работает нормально. Этот метод вызывается сотни раз, поэтому я кеширую «специальный символ», чтобы шрифт и диапазон вызывались только один раз (в первый раз).

Я должен передать контекст, чтобы загрузить шрифт, однако контекст нужен только в первый раз. Интересно, теряю ли я какую-то производительность, пропуская Context сотни раз? Стоит ли это какой-либо производительности? Любые предложения по улучшению моего кода?

1 Ответ

0 голосов
/ 14 ноября 2018

Не должно.Вы фактически используете переданный Контекст, только если Spanned еще не существует.Реальная проблема производительности заключается в создании самой гарнитуры, которая выполняется только один раз.

Поскольку вы кэшируете параметр Spanned, а не Context, у вас не должно возникнуть проблем.


Редактировать:

Если вы действительно хотите быть в безопасности, передайте context.getApplicationContext() при вызове метода.Этот контекст никогда не «истекает», пока ваше приложение работает, и будет GCed, как только он перестанет работать.

...