是的,是的。:)
静态字段。过度使用静态字段存在很多问题。它们不仅访问速度较慢,而且很容易被 Android 一夜之间销毁,而且在整个地方检查它们的引用或用if (sSomeStatic == null) { return new SomeStatic()}
. 可以存储对名为(例如)ApplicationData 的类的静态引用,您可以在其中存储一些值,嘿,我们时不时需要一些全局变量,但它很容易滥用,以至于我每次检查新的 Android 时都会皱眉开发者的源代码。
是的,将您的 Application 实例存储在单例模式中并使用它,但不要仅仅因为您可以这样做而在您的 Application 实现中添加 200 个静态字段YOURAPP.getInstance().SomeLazyValueYouAddedHere();
那很不好。它会导致不良做法,并且会比拥有访问硬引用的良好设计要慢。
我可以永远继续下去,但是关于这个有很多 StackOverflow 讨论(有些激烈!)。如果您在这里,我假设您是在寻求经验;我在不同的项目中做了几年的 Android,我的经验一直是静态越少越好。
现在是上下文……哦,上下文。永远不要将上下文存储在硬引用中。否则你会泄漏内存。一个活动引用了 View 和许多其他的东西。如果您存储上下文,那么您将存储活动并且事情从那里开始变坏。学习传递上下文,尽可能使用应用程序上下文,如果你需要传递它,这样做是有充分理由的。大多数情况下,App 上下文足以获取资源、字符串等。如果要存储 Context,请始终存储context.getApplicationContext();
永远不要存储静态活动上下文。你也可以用谷歌搜索,StackOverflow 有一些很好的答案。
如果你买得起一本且只有一本 Android 书,那就买一本 BNR。尽管 Android 可能会不时发布新的 SDK,但这些概念是完全有效的,作者使用的模式是处理活动、上下文、片段等的正确方法。
更新您的应用程序应如下所示:
public class YourApp extends Application {
private static YourApp sInstance;
public YourApp() {
super();
sInstance = this;
}
public static YourApp getInstance() {
return sInstance;
}
}
在这种情况下,是的,您将获得对相同 App Context 的相同静态引用。