【发布时间】:2015-10-28 13:06:05
【问题描述】:
我正在做一些大的重构操作,与 Android 应用程序中的一些性能改进相关,该应用程序使用具有大量静态变量甚至静态活动引用的类,然后通过应用程序使用!因此,我一直在寻找 Android 中的一些最佳实践来存储数据并在我的应用中为这些数据提供全局访问权限。
首先我删除了所有活动引用以避免任何内存泄漏,但我仍然想知道关于需要在 android 应用程序中的任何位置使用的静态变量的最佳做法。
我读了很多遍(example1,exemple2):使用静态变量并不是一个好的做法,使用带有 getter 和 setter 的单例类更好/更干净,以便无论活动如何都可以访问我的全局变量我在哪里。所以我开始想的是一个看起来像这样的类:
public class AppSingleton extends Application {
private static AppSingleton appInstance;
// different stored data, which could be relative to some settings ..
private String setting1;
private String setting2;
private AppSingleton() {
super();
appInstance = new AppSingleton();
}
public static AppSingleton getAppInstance() {
if (appInstance == null) {
appInstance = new AppSingleton();
}
return appInstance;
}
// Getter and Setter for global access
public String getSetting1() {return setting1;}
public void setSetting1(String setting1) {this.setting1 = setting1;}
public String getSetting2() {return setting2;}
public void setSetting2(String setting2) {this.setting2 = setting2;}
}
然后我可以使用example:
// Get the application instance
AppSingleton appS = (App) getApplication();
// Call a custom application method
appS.customAppMethod();
// Call a custom method in my App singleton
AppSingleton.getInstance().customAppSingletonMethod();
// Read the value of a variable in my App singleton
String var = AppSingleton.getInstance().getCustomVariable;
对我来说,AppSingleton 听起来不错,因为这个单例将此类的实例化限制为一个对象,而且在应用程序中有任何未销毁的 Activity 之前,此类不会被销毁,因此这意味着我可以在当前生命周期中保留我的全局数据我的应用程序,例如来自“登录”。但我也可以从我的 getter/setter 中维护我的全局变量的状态。
但后来我还查看了有关Performance Tips 的官方android 文档,其中说使用静态变量很好,它更快,并且不要忘记避免内部getter 和setter 它太膨胀了!
我对所有这些都有些困惑,我真的很想了解更多有关该主题的信息。使用一个类提供对我的代码不同部分所需的某些变量的访问的最佳实践是什么? AppSingeleton 上面的类在架构和性能方面是否会很有趣? 在android中使用单例模式管理全局变量是个好主意吗?
【问题讨论】:
-
@Nitesh 谢谢你,我已经把它和我的问题联系起来了,它实际上很有帮助,但是当我阅读 android Performance Tips 我也有点困惑..
-
糟糕的是我再次发布了相同的链接:)..即使我很高兴知道这个问题的答案..
标签: java android performance static singleton