4

おそらくこれは本当にばかげた質問ですが、私はこのような構造を作成しましたが、パフォーマンスに本当に問題があります。

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 Class オブジェクトを作成しようとすると、本当に遅くなります。誰かが私に理由を説明してくれれば、私は非常に感謝しています。どうも。

4

1 に答える 1

1

あなたのコードから大きな危険信号として際立っているものはないようです。作成部分が本当に遅い理由については、さまざまな理由が考えられます。考慮事項:

  1. OuterClass はアクティビティからどのようにインスタンス化されていますか? 一度しか呼び出されていないのか、それとも複数のインスタンスを作成していますか。多ければ多いほど遅くなります。

  2. R.layout.new_line、R.layout.job_function_container、R.layout.view_port には他にいくつのウィジェットがありますか? それぞれに 50 のウィジェットを 1 つだけ持つと、顕著な遅延が発生する可能性があります。

  3. どのデバイスでテストしていますか? 古い Droid での実行は、Nexus 7 でのテストよりも大幅に遅くなります。

  4. 最後に (そしておそらく最も重要なことですが)、最大の速度低下はネスト レイアウトの複雑さや深さだと思います。Ancantus が述べたように、深いレイアウト レイヤーを避けるようにしてください。深入りしすぎると、奇妙なことが起こり始めるかもしれません。ほとんどの場合、そのような階層が消費するメモリの量が原因です。

ビューを動的に追加する方法が必要な場合は、ターゲット プラットフォームで許可されている場合は、ListView、GridView、または GridLayout を調べることをお勧めします。頭のてっぺんから、なぜこんなに複雑なデザインが必要なのか、私には思いつきません。特別な場合のニーズはありますが、通常、より簡単で正しい方法が常にあります。

役立つ場合とそうでない場合がある、レイアウトの最適化に関するいくつかの役立つリンクを次に示します。

于 2012-10-22T16:43:33.420 に答える