【问题标题】:Should I use "_activity = this;"?我应该使用“_activity = this;”吗?
【发布时间】:2012-12-30 03:14:56
【问题描述】:

我应该使用“_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();
            }
        });
    }
}

编辑:cmets 的另一个附带问题:通过举手,谁实际使用_activity

【问题讨论】:

  • 为什么需要在对象本身中引用对象?您是否正在考虑使用 static 引用它?
  • 也许我不应该让这个案例变得微不足道。我将对其进行编辑,使按钮位于其自己的对象中。我会在整个大文件中使用引用,可能还有子类。
  • 在这些情况下,只需使用MainActivity.this。如果您有一个同样易于访问的参考,则无需保留额外的参考。

标签: java android android-activity


【解决方案1】:

这不是一个好习惯。在大多数情况下只需使用this,在创建匿名子类时使用MainActivity.this等。

我认为要问自己的正确问题是,“添加此成员变量是否对我有任何帮助”,或者“我可以用 _activity 做哪些我不能用 this 做的事情。我可以告诉你答案是否定的,但你应该自己决定它是否是真的。

【讨论】:

    【解决方案2】:

    这不是一个好习惯。

    除了一无所获(直接使用this做不到):

    • 它使父对象更大(通过一个引用),
    • 可能会慢一些,并且
    • 它使您的代码更加脆弱;例如如果有人不小心为变量分配了不同的值。

    我认为代码的可读性较少,但你可能不同意。

    【讨论】:

      【解决方案3】:

      不,这不好。如果我正在阅读代码,我知道“this”是什么意思,但如果我看到我需要调查。

      【讨论】:

      • 一开始我也不知道_activity是什么。但是,在多次看到它之后,包括在 Google 的示例代码中,我现在知道它的含义了。
      • Google 的示例代码在哪里?即使命名约定不正确应该是 mActivity (source.android.com/source/code-style.html)
      【解决方案4】:

      只有当你的外部类不是一个活动时才有意义,但你需要一个。例如,如果你想在自己的文件中定义你的 onclicklistener,你需要传入并存储一个引用(注意不要像注释一样泄漏;)

      【讨论】:

        【解决方案5】:

        除了创建不必要的引用(因为实例也可以通过 this 关键字或 MainActivity.this 获得,不鼓励使用下划线前缀的字段名称,因为 Code Conventions for the Java Programming Language: 9. Naming Conventions

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-13
          • 2012-11-24
          • 1970-01-01
          • 2011-09-29
          • 1970-01-01
          • 2011-12-26
          • 2021-12-10
          • 2010-12-25
          相关资源
          最近更新 更多