首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不必要地传递上下文。很贵吗?

不必要地传递上下文。很贵吗?
EN

Stack Overflow用户
提问于 2018-11-14 02:07:05
回答 1查看 70关注 0票数 1

因此,我有一个方法getSpecialCharacter,它是从许多不同的活动调用的。

代码语言:javascript
复制
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;
}

它基本上设置了一个特殊的字符从一个加载的字体和应用颜色绿色。效果很好。这个方法被调用了数百次,所以我缓存了“特殊字符”,这样字体和span就只能调用一次(第一次)。

我必须传递上下文,以加载字体,但上下文只是第一次需要。我想知道我是否因为不必要地传递上下文数百次而失去了一些性能。这需要表演吗?有什么改进我的代码的建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-14 02:16:40

它不应该。实际上,只有在跨跨不存在的情况下才使用传递的上下文。真正的性能问题是创建字体本身,这只需完成一次。

由于您缓存的是跨范围而不是上下文参数,所以您应该没有问题。

编辑:

如果您真的希望安全,那么在调用该方法时传递context.getApplicationContext()。只要你的应用程序在运行,这个上下文就不会“过期”,当它停止运行时,它就会成为GCed。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53292185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档