不必要地传递上下文.成本高吗



所以,我有这个方法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而失去了一些性能。这会影响性能吗?有什么改进我的代码的建议吗?

不应该。只有当Spanned不存在时,您才实际使用传递的Context。真正的性能问题是创建Typeface本身,而这只需要一次。

由于您缓存的是Spanned而不是Context参数,所以应该不会有问题。


编辑:

如果您真的想确保安全,请在调用该方法时传递context.getApplicationContext()。只要你的应用程序正在运行,该上下文就永远不会"过期",一旦停止运行,就会被GCed。

最新更新