6

「」を使用する必要があります_activity = this;か?

サンプルコードで_activityが何度も参照されているのを見てきました。それで、私はそれが良い習慣のように見えると勝手に決めて、しばらくの間(1年以上)私のすべてのコードで使用してきました。しかし、私がもっと広める前に、グローバル(アクティビティローカル)コンテキスト変数を使用することが良い習慣であるかどうかについての適切なドキュメントを見つけたいと思いました。

誰かがアイデア/考え/リンクを持っていますか?長所と短所を知っていますか?

私がこれまでに見つけた1つのリソースは、これを使用するのに良い時も悪い時もあると言っているようです

またはを使用できることは知っていますが、それは問題ではありません。thisMainActivity.this

..私が何について話しているのかわからない場合に備えて、その場で作成された簡単な例を次に示します。

public class MainActivity extends Activity {
    MainActivity _activity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        _activity = this; // TODO: Find out if this is good practice?
        setContentView(R.layout.activity_main);
    }

    public void onClickButton(View v) {
        Toast.makeText(_activity, "Five boxing wizards", Toast.LENGTH_LONG).show();

        button2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(_activity, "asdf", Toast.LENGTH_LONG).show();
            }
        });
    }
}

編集:コメントのための別のサイド質問:実際に使用している手のショーによって_activity

4

5 に答える 5

11

これは良い習慣ではありません。thisほとんどの場合、MainActivity.this匿名のサブクラスを作成するときなどに使用するだけです。

自分自身に問うべき正しい質問は、「このメンバー変数を追加することは私のために何かをするか」、または「_activity私ができないことで私ができることはありthisますか。答えは「いいえ」です。しかし、それが本当かどうかは自分で決める必要があります。

于 2012-12-30T03:20:17.340 に答える
3

それは良い習慣ではありません。

this何も達成しないことは別として(直接使用して行うことはできません):

  • 親オブジェクトを(1つの参照によって)大きくします。
  • 少し遅くなる可能性があり、
  • コードがより壊れやすくなります。たとえば、誰かが誤って変数に別の値を割り当てた場合です。

私はコードが読みにくいと主張しますが、あなたはそれに同意しないかもしれません。

于 2012-12-30T03:27:03.670 に答える
1

いいえ、良くありません。コードを読んでいる場合、「これ」が何を意味するかはわかりますが、調査する必要があることがわかった場合。

于 2012-12-30T03:23:46.140 に答える
0

不要な参照を作成することに加えて(インスタンスはthisキーワードまたはを介して使用できるため、Javaプログラミング言語のコード規則MainActivity.thisに従ってアンダースコアを前に付けたフィールド名は推奨されません。9 。命名規則

于 2012-12-30T13:47:05.287 に答える
0

これは、外部クラスがアクティビティではない場合にのみ意味がありますが、アクティビティが必要です。たとえば、onclicklistenerを独自のファイルで定義しすぎる場合は、参照を渡して保存する必要があります(メモとしてリークしすぎないように注意してください;)

于 2012-12-30T08:44:27.850 に答える