这可能是一个非常愚蠢的问题,但我创建了这样的结构,我确实遇到了性能方面的问题。
public class OuterClass extends LinearLayout {
private LinearLayout viewPort;
public OuterClass(Context context) {
super(context);
initComponents(context);
addInnerClass();
}
private void initComponents(Context context){
LayoutInflater inflater = (LayoutInflater) getContext().
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.view_port, this);
viewPort = (LinearLayout) findViewById(R.id.view_port);
}
private void addInnerClass(){
for ( int i = 0; i < k; i++ ){
InnerClass functio = this.new InnerClass();
viewPort.addView(functio);
}
}
private class InnerClass extends RelativeLayout{
private LineraLayout newLines;
public InnerClass() {
super(OuterClass.this.context);
initComponents(OuterClass.this.context);
addNLines();
}
private void initComponents(Context context){
LayoutInflater inflater = (LayoutInflater) getContext().
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.job_function_container, this);
newLines = (LinearLayout) findViewById(R.id.newLines);
}
private void addInnerOfInner(View view){
newLines.addView(view);
}
private void addNLines(){
for ( int i = 0; i < k1; i++ ){
InnerOfInnerClass line = this.new InnerOfInnerClass();
addInnerOfInner(line);
}
}
public class InnerOfInnerClass extends RelativeLayout{
private InnerOfInnerClass(){
super(OuterClass.this.context);
initComponents(OuterClass.this.context);
}
private void initComponents(Context context){
LayoutInflater inflater = (LayoutInflater) getContext().
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.new_line, this);
// Setting some fields.
}
}
}
}
如果我将尝试在每个InnerClass中创建5个InnerClass对象和5个InnerOfInner类对象,那么它会非常慢。如果有人能解释我原因,我将非常感激。 THX。
答案 0 :(得分:1)
似乎没有什么东西能从你的代码中脱颖而出,成为一个巨大的红旗。至于为什么它在创作部分真的很慢可能是出于各种原因。需要考虑的事项:
如何从活动中实例化OuterClass?是仅调用一次还是创建多个实例。它越多越慢。
R.layout.new_line,R.layout.job_function_container,R.layout.view_port还有多少个小部件?只有一个小部件与每个小部件50可能会导致一些明显的延迟。
您正在测试哪种设备?在旧的Droid上运行将比在Nexus 7上测试慢得多。如果你使用模拟器......好吧,总是希望一切都运行缓慢。
最后(可能是最相关的),我认为最大的减速是嵌套布局的复杂性或深度。正如Ancantus所提到的,尽量避免使用深层布局。走得太深,奇怪的事情可能会开始发生。主要是由于这种层次结构消耗的内存量。
如果您需要动态添加视图的方法,我建议您查看ListView,GridView,甚至是目标平台允许的GridLayout。在我的头脑中,我想不出为什么你需要这么复杂的设计。虽然有特殊情况需要,但通常总是有一种更简单,更正确的方式。
以下是布局优化的一些有用链接,可能对您有所帮助,也可能没有帮助: