此:
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通知垃圾收集器我已完成变量。那有意义吗?这需要吗?
答案 0 :(得分:2)
在Android组件类的特定情况下(例如Activity
,Service
),仅在不需要{{1}的情况下使用final
- plus-initializer方法}}。从this
方法调用Activity
之后,从这些组件的基类继承的方法(例如super.onCreate()
)可能无效。
因此,在上面显示的两个例子中,第二个例子是正确的。
答案 1 :(得分:1)
一般来说,在Java中,在使用实例之前使用this
并不好。使用构造函数是方法一的推荐方法,但是Activity构造函数没有这样使用,因此模式2在Android代码方面是正确的。
如果需要将变量设为final,则需要将其包装在另一个Java类中,您可以使用构造函数正确初始化变量。
答案 2 :(得分:0)
在第一种情况下,您已将cm变量声明为final,因此您无法为此变量定义任何新值。即现在你不能写cm = xyz。
在第二种情况下,您可以随时更改cm的值或使用某些参数等重新初始化它。
在您的情况下,第二种方法效果最佳