2

onCreate、onResume、またはそれらを宣言するときに、インスタンス変数にデフォルト値を与える方が良いですか? コード内:

それらを宣言するとき:

public Class Foo extends Activity{

    private String variable1 = "my super var";
    private int variable2 = 42;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

または onCreate 中

public class Foo extends Activity{

    private String variable1;
    private int variable2;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        variable1 = "my super var";
        variable2 = 42;
    }
}

または再開中:

public class Foo extends Activity{

    private String variable1;
    private int variable2;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    protected void onResume() {
        super.onResume();
        variable1 = "my super var";
        variable2 = 42;
    }   
}

ありがとうございました。

4

3 に答える 3

3

上記の回答は適切であり、コーディング スタイルによって異なりますが、原則として、変数が宣言されている場合以外はデフォルト値を割り当てないようにしてください。これは保守性に役立ちます。奇妙なバグを修正するために 6 か月後にコードに戻った場合、コード全体にデフォルトが散らばっていると、問題がさらに大きくなります。

目的がある場合にのみ onCreate、onResume などを使用し、意味のあるコメントを追加します。

// re-initialise foobarValue when the app regains focus
// to ensure that the wobbly gong generator starts from the beginning
foobarValue = 1;

乾杯

于 2012-04-12T19:12:53.090 に答える
2

それはすべて、コーディングスタイルのセンスと、もちろん割り当てられるインスタンス変数に依存します。多くの場合、私のインスタンス変数のかなりの数がビューであるため、有効なコンテキストを持つことに依存していますonCreate()。アクティビティを離れて戻るたびに変数をリセットする必要がある場合onResume(). インラインに関しては、変数が変更されず、変更されるべきではないことがわかっている場合にこれを行う傾向があり、それらをfinal. onCreate()インラインで構築された変数と依存の間のバランス。すべての課題を 1 か所にまとめたいと思う人もいるかもしれません。onCreate()単一の場所ですべての割り当てをキャプチャする方法として理にかなっています。それらの間に実際のパフォーマンスの違いがないことを気にしない場合は、必要な場所に割り当てを配置してください。

于 2012-04-12T18:50:11.273 に答える
0

onCreateデフォルト値として、または値が単純な場合と、それほど大きな違いはないと思います。のようなアクティビティ関連のものがonCreate必要な場合に適しています。ContextIntentonCreate

ただし、この初期化をonCreatevs.でonResume行うと、大きな違いが生じます。コードを入れるonResumeと、アクティビティにフォーカスを戻すたびに実行されます (正確な定義については、docsを参照してください)。これは、ホームを押してからアプリに戻ると、このコードが再び実行されることを意味します。したがって、それは本当にあなたが望む行動に依存します。

于 2012-04-12T18:53:57.437 に答える