Android中布局的内部类

时间:2012-10-22 14:29:06

标签: java android

这可能是一个非常愚蠢的问题,但我创建了这样的结构,我确实遇到了性能方面的问题。

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。

1 个答案:

答案 0 :(得分:1)

似乎没有什么东西能从你的代码中脱颖而出,成为一个巨大的红旗。至于为什么它在创作部分真的很慢可能是出于各种原因。需要考虑的事项:

  1. 如何从活动中实例化OuterClass?是仅调用一次还是创建多个实例。它越多越慢。

  2. R.layout.new_line,R.layout.job_function_container,R.layout.view_port还有多少个小部件?只有一个小部件与每个小部件50可能会导致一些明显的延迟。

  3. 您正在测试哪种设备?在旧的Droid上运行将比在Nexus 7上测试慢得多。如果你使用模拟器......好吧,总是希望一切都运行缓慢。

  4. 最后(可能是最相关的),我认为最大的减速是嵌套布局的复杂性或深度。正如Ancantus所提到的,尽量避免使用深层布局。走得太深,奇怪的事情可能会开始发生。主要是由于这种层次结构消耗的内存量。

  5. 如果您需要动态添加视图的方法,我建议您查看ListView,GridView,甚至是目标平台允许的GridLayout。在我的头脑中,我想不出为什么你需要这么复杂的设计。虽然有特殊情况需要,但通常总是有一种更简单,更正确的方式。

    以下是布局优化的一些有用链接,可能对您有所帮助,也可能没有帮助: