我应该使用"_activity = this;"吗?

6
我应该使用"_activity = this;"吗?
我在示例代码中多次看到了对_activity的引用。因此,我任意决定它看起来像是一个很好的做法,并且已经在我的所有代码中使用了一段时间(一年多)。但是,在我开始更广泛地传播消息之前,我想找到一些适当的文档,以确定使用全局(活动本地)上下文变量是好还是不好的做法。
有人有想法/思路/链接吗?知道什么优缺点?
到目前为止,我发现的一种资源似乎表明有好的和坏的时机使用this 我知道我可以使用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
为什么需要在一个对象内部引用该对象本身?你是否考虑使用静态引用? - Cat
也许我不应该把这个案例弄得太简单了。我会编辑它,使按钮成为自己的对象。我将在大文件中使用引用,可能还包括子类。 - Anonsage
1
在这些情况下,只需使用 MainActivity.this。当您拥有一个同样易于访问的引用时,无需保留额外的引用。 - Cat
5个回答

11

这样做并不是好的实践。通常情况下只需使用this,在创建匿名子类时使用MainActivity.this

我认为应该问自己的正确问题是,“添加这个成员变量对我有什么作用”,或者“我能通过_activity做些什么,而不能通过this做到”。我可以告诉你答案是“没有”,但你应该自己决定是否属实。


3

这不是一个好的实践方法。

除了不能做到使用this直接实现的效果外:

  • 它会使父对象变得更大(增加一个引用),
  • 它潜在地会有一点慢,
  • 它会使你的代码更加脆弱;例如,如果有人意外地给变量赋了一个不同的值。

我认为这种代码不太易读,但你可能不同意。


1
不,这不好。如果我在阅读代码时知道“this”的含义,但如果我看到它,我需要进行调查。

起初,我也不知道_activity是什么。但是,在看到它很多次,包括在谷歌的示例代码中,现在我知道当我看到它时它意味着什么。 - Anonsage
1
在谷歌的示例代码中哪里?即使命名约定也不正确,应该是 mActivity(http://source.android.com/source/code-style.html) - Diego Torres Milano

0

只有在外部类不是活动时才有意义,但您需要一个。例如,如果您想在自己的文件中定义onclicklistener,则需要传递并存储引用(并小心不要泄漏)。


0

除了通过关键字thisMainActivity.this访问实例之外,创建不必要的引用是不推荐的。同时,以下划线为前缀的字段名称也不被建议使用,参考Java编程语言代码规范:9. 命名规范


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接