首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >getLayoutInflater对LayoutInflater.from

getLayoutInflater对LayoutInflater.from
EN

Stack Overflow用户
提问于 2014-10-30 07:27:06
回答 3查看 3.5K关注 0票数 14

学习一些(已知是好的)代码,我可以看到如下的逻辑:

代码语言:javascript
运行
复制
if (getContext() instanceof Activity) {
      inflater=((Activity)getContext()).getLayoutInflater();
}
    else {
      inflater=LayoutInflater.from(getContext());
}

我想知道,为什么这个if/else,如何更好地,只是,在所有情况下使用LayoutInflater.from

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-30 07:48:58

其实没什么大不了的。

活性Window.Window PhoneWindow的通常策略实现依次是LayoutInflater.from(context),其中context是活动。

因此,充气器对象实际上是相同的,在活动的情况下使用相同的Context

LayoutInflater.from()真的是Context.getSystemService()。现在,系统服务是looked up by name from a map,然后是retrieved from a cache。与访问Activity中已经初始化的成员变量相比,此查找具有一定的开销。

因此,与实际视图层次结构膨胀相比,这似乎是一种微优化,不会对运行时性能产生多大影响。

这种优化实际上会对开发人员的生产力产生负面影响,因为人们需要停下来思考代码存在的原因。

票数 17
EN

Stack Overflow用户

发布于 2014-10-30 07:43:08

通过相同的代码,它会在非活动的上下文中使用LayoutInflater.from。我假设使用活动的充气器会重用已经创建的充气器,而另一种选择则会从上下文中创建一个布局充气器。

我要做的唯一更改是将上下文保存在变量中,以防止重复调用相同的函数并从对象中检索相同的值:

代码语言:javascript
运行
复制
Context ctx = getContext();
if(ctx instanceof Activity) {
  inflater = ((Activity)ctx).getLayoutInflater();
}
else {
  inflater = LayoutInflater.from(ctx);
}

Android有很多优化,可以在可用时重用项目,比如可以重用的ListViews视图。

票数 4
EN

Stack Overflow用户

发布于 2022-03-10 08:56:14

从android文档来看,建议使用getLayoutInflater( ) instead.The文档来描述LayoutInflator.from。:

将布局XML文件实例化到其相应的View对象中。它从来没有直接使用过。相反,

它建议使用:

使用Activity.getLayoutInflater()或Context#getSystemService检索已经连接到当前上下文并为正在运行的设备正确配置的标准LayoutInflater实例。

换句话说,为了更简单的代码和性能,您最好从已经初始化的上下文中使用getLayoutInflater。

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

https://stackoverflow.com/questions/26647277

复制
相关文章

相似问题

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