在Activity中声明final变量和在onCreate方法上实例化它之间有什么区别?

时间:2016-04-30 15:46:51

标签: java android android-activity

此:

public class LoadingActivity extends Activity  {

      final private ContactManager cm = new ContactManager(this);
      ...

VS。这样:

public class LoadingActivity extends Activity {

    private ContactManager cm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_loading);
       cm = new ContactManager(this);
       ...

我理解final的含义,变量无法重新实例化,但是我不确定使用哪种模式以及它如何影响垃圾收集器?我想在第二个版本上我可以使用onDestroy通知垃圾收集器我已完成变量。那有意义吗?这需要吗?

3 个答案:

答案 0 :(得分:2)

在Android组件类的特定情况下(例如ActivityService),仅在不需要{{1}的情况下使用final - plus-initializer方法}}。从this方法调用Activity之后,从这些组件的基类继承的方法(例如super.onCreate())可能无效。

因此,在上面显示的两个例子中,第二个例子是正确的。

答案 1 :(得分:1)

一般来说,在Java中,在使用实例之前使用this并不好。使用构造函数是方法一的推荐方法,但是Activity构造函数没有这样使用,因此模式2在Android代码方面是正确的。

如果需要将变量设为final,则需要将其包装在另一个Java类中,您可以使用构造函数正确初始化变量。

答案 2 :(得分:0)

在第一种情况下,您已将cm变量声明为final,因此您无法为此变量定义任何新值。即现在你不能写cm = xyz。

在第二种情况下,您可以随时更改cm的值或使用某些参数等重新初始化它。

在您的情况下,第二种方法效果最佳