在Activity的开头声明Context是一个好习惯

时间:2014-10-03 07:26:38

标签: android android-activity android-context

在我参与活动的最后一个项目中,我为需要上下文的方法提供了很多MyActivity.this,所以我决定在课程开头就这样做

private Context context = ActivityStage2.this;

然后只需将context传递给对象方法。到目前为止它工作正常,但它是否可以像这样声明Context?我的意思是,每次引用上下文对象时,它总是具有MyActivity.this的更新状态吗?

2 个答案:

答案 0 :(得分:4)

  • 你可以做到,但没有必要这样做。

你基本上"缓存" this对字段的引用。字段初始化将在构造函数体之前运行,因此每次重新创建对象时,都将更新引用context。这类似于this,它指向此实例对象。

现在你为什么这样做?可读性?看起来你想在内部类中使用它,因为你明确地用它来限定它:ActivityStage2.this。从内部类中限定外部类引用的java方法是程序员很好理解的,这里的收益很少。一个例外可能是匿名的内部类,你不具备内部类的名称。在这种情况下,缓存对Activity的引用是有意义的,但我宁愿使用最终的局部变量而不是字段。

这样做的另一个原因可能是你只需要Context界面而不是ActivityStage2界面:这在理论上是有道理的,但在实践中我不会在没有其他更好的情况下做到这一点原因。

最后一件事:如果您将字段改为静态字段,则确实会泄漏

答案 1 :(得分:0)

如果您遵循以下列出的两条规则,则没有问题:

  1. 将引用保留在实例成员中。如果您使用静态字段,则GC永远不会回收您的Activity实例,因为您的MainActivity类具有对该对象的强引用。如果您确实需要这样做,请使用WeakReference

  2. 保留对Activity实例的引用。由于我刚才描述的原因,请不要继续引用其他活动。

  3. 否则一切都取决于你和你的代码风格:)