学习一些(已知是好的)代码,我可以看到如下的逻辑:
if (getContext() instanceof Activity) {
inflater=((Activity)getContext()).getLayoutInflater();
}
else {
inflater=LayoutInflater.from(getContext());
}
我想知道,为什么这个if/else
,如何更好地,只是,在所有情况下使用LayoutInflater.from
?
发布于 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
中已经初始化的成员变量相比,此查找具有一定的开销。
因此,与实际视图层次结构膨胀相比,这似乎是一种微优化,不会对运行时性能产生多大影响。
这种优化实际上会对开发人员的生产力产生负面影响,因为人们需要停下来思考代码存在的原因。
发布于 2014-10-30 07:43:08
通过相同的代码,它会在非活动的上下文中使用LayoutInflater.from。我假设使用活动的充气器会重用已经创建的充气器,而另一种选择则会从上下文中创建一个布局充气器。
我要做的唯一更改是将上下文保存在变量中,以防止重复调用相同的函数并从对象中检索相同的值:
Context ctx = getContext();
if(ctx instanceof Activity) {
inflater = ((Activity)ctx).getLayoutInflater();
}
else {
inflater = LayoutInflater.from(ctx);
}
Android有很多优化,可以在可用时重用项目,比如可以重用的ListViews视图。
发布于 2022-03-10 08:56:14
从android文档来看,建议使用getLayoutInflater( ) instead.The文档来描述LayoutInflator.from。:
将布局XML文件实例化到其相应的View对象中。它从来没有直接使用过。相反,
它建议使用:
使用Activity.getLayoutInflater()或Context#getSystemService检索已经连接到当前上下文并为正在运行的设备正确配置的标准LayoutInflater实例。
换句话说,为了更简单的代码和性能,您最好从已经初始化的上下文中使用getLayoutInflater。
https://stackoverflow.com/questions/26647277
复制相似问题