2

時々、新しいアクティビティを入力するには、たとえば数秒で値を更新する必要がありますTextView。それで、私が開始アクティビティのnsStringに書き込むためにnsを得たとしましょう。TextView

優れたパフォーマンスを保証し、「クリーンなコード」を提供するための最良のアプローチはどれですか?

バリアント1(実際に適用する方法):単一のTextView変数「tempText」をグローバル変数として宣言し、この変数に更新するためにTextViewを割り当てます(または追加のメソッドで)。または、a)はで手順全体を実行し、onCreate()b)はegと呼ばれるメソッドですべてを処理します。updateTextViews()

(...)

public class MyActivity extends Activity{

    private TextView tempText;

    public onCreate(Bundle icicle){
        (...)

        tempText = (TextView) findViewById(R.id.tv_1);
        tempText.setText(string_1);

        tempText = (TextView) findViewById(R.id.tv_2);
        tempText.setText(string_2);

        (...)

        tempText = (TextView) findViewById(R.id.tv_n);
        tempText.setText(string_n);
    }
}

バリアント2:またはそれぞれのメソッドで単一のTextView変数「tempText」を変数として宣言し、onCreate()この変数に更新するようにTextViewを割り当てます。残りはバリアント1に類似しています。

(...)

public class MyActivity extends Activity{

    public onCreate(Bundle icicle){
        (...)

        private TextView tempText;

        tempText = (TextView) findViewById(R.id.tv_1);
        tempText.setText(string_1);

        tempText = (TextView) findViewById(R.id.tv_2);
        tempText.setText(string_2);

        (...)

        tempText = (TextView) findViewById(R.id.tv_n);
        tempText.setText(string_n);
    }
}

バリアント3:更新するTextViewたびにグローバル変数 を宣言します。TextView私の知る限り、これにはRAMにもっと多くのスペースが必要ですが、速度への影響についてはわかりません。onCreate()ここでも、 (a))と別の方法(b))での取り扱いに違いはありますか?

(...)

public class MyActivity extends Activity{

    private TextView tempText_1;
    private TextView tempText_2;
    (...)
    private TextView tempText_n;

    public onCreate(Bundle icicle){
        (...)

        tempText_1 = (TextView) findViewById(R.id.tv_1);
        tempText_1.setText(string_1);

        tempText_2 = (TextView) findViewById(R.id.tv_2);
        tempText_2.setText(string_2);

        (...)

        tempText_n = (TextView) findViewById(R.id.tv_n);
        tempText_n.setText(string_n);
    }
}

バリアント4:またはこれを処理するそれぞれのメソッドで更新するTextViewすべての変数 を宣言します。残りはバリアント3に類似していますか?TextViewonCreate()

(...)

public class MyActivity extends Activity{


    public onCreate(Bundle icicle){
        (...)

        private TextView tempText_1;
        private TextView tempText_2;
        (...)
        private TextView tempText_n;

        tempText_1 = (TextView) findViewById(R.id.tv_1);
        tempText_1.setText(string_1);

        tempText_2 = (TextView) findViewById(R.id.tv_2);
        tempText_2.setText(string_2);

        (...)

        tempText_n = (TextView) findViewById(R.id.tv_n);
        tempText_n.setText(string_n);
    }
}

「最良の」方法はどれですか?バリアント1と2は、RAMに1つのメモリアドレスのみを予約してこれを使用しますが、Robert C. Martinsの「CleanCode」によると、変数は実際にはあいまいです。オプション3と4は正反対です。しかし、残りの部分については、私は他の影響をあまり意識していません。

4

2 に答える 2

3

個人的には、Activityの他の場所(つまり、通常は静的UIの更新を配置するonResume)でTextViewに再度アクセスする必要がある場合は、Variant3を使用します。setTextがワンショットのものである場合、私は次のようなことを行います-

((TextView) findViewById( R.id.tv_1 ) ).setText( string_1 );
((TextView) findViewById( R.id.tv_2 ) ).setText( string_2 );

ビューが存在しない可能性があることに疑いがある場合(つまり、開発中にレイアウトを変更している場合)、-などのラッパーを使用します。

private void safeSetText( int id, String caption ) {
    TextView tv = (TextView) findViewById( id );
    if( tv != null )
        tv.setText( caption );
    else
        Log.d( "..... " );
}

そして、onCreateで:safeSetText(R.id.tv_1、string_1); safeSetText(R.id.tv_2、string_2);

于 2012-10-11T14:57:31.900 に答える
1

このアクティビティ全体で値を使用する場合は、通常どおりにクラスのメンバー変数として宣言します。OnCreate内で宣言するようなものはなく、それでもメンバー変数です。クラス本体で宣言するのと同じくらい良いです、それは読みやすさを改善します。

また、どこかでメンバー変数を宣言している場合、それは同じ量のRAMを占有します。あなたがそこに得る/失うものは何もありません。

変数がローカルでのみ使用されることが確実な場合は、ローカルで宣言します。変数はヒープではなくスタックに割り当てられ、ブロックを終了するとすぐに消えます。

変数をそのように宣言するAndroidに最適化された方法はありません。あなたは物事を行う通常のオブジェクト指向/Javaの方法に従うことができます。

于 2012-10-11T15:09:00.863 に答える