java – 静态变量,模式和Android性能
我正在做一些重大的重构操作,相对于
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听起来不错,因为这个单该restrics这个类的部份实例化一个对象,同时也是该类不被破坏,直到有应用程序中的任何未销毁的活动,这样就意味着我可以保持我的全局数据在我的应用程序的当前生命周期例如来自“登录”.但是我也可以从我的getter / setter维护我的全局变量的状态. 但后来我也看了一下关于Performance Tips的官方android文档,它说使用静态变量很好,它更快,不要忘记避免内部getter和setter它太过膨胀! 我对所有这些都感到有些困惑,我真的很想了解更多有关该主题的内容.使用一个类提供对代码不同部分所需的某些变量的访问的最佳实践是什么? AppSingeleton上面的类是否可以在架构和性能方面使用? 解决方法
这些行在您的代码中是完全错误的:
private AppSingleton() { super(); appInstance = new AppSingleton(); } public static AppSingleton getAppInstance() { if (appInstance == null) { appInstance = new AppSingleton(); } return appInstance; } 你不能实例化新的应用程序,Android框架实例化它.改为: private AppSingleton() { super(); appInstance = this; // keep ref to this application instance } public static AppSingleton getAppInstance() { return appInstance; } 关于访问全局变量.我相信将这些单身人士放在你申请的其他地方更有条理.应用程序类有不同的职责,不应该用不同的任务重载它.这是OO清洁编码. 此外,有时在Android应用程序中没有太多理由为所有内容设置getter / setter,因为您不需要像大型项目那样多的访问控制.但是,这应该被视为必要的个案,而不是一般规则. 所以你可以举例如: public class Globals { private static final Globals instance = new Globals(); public static Globals get() { return instance; } public String value1 = "Hello" public int value2 = 42; } 然后根据需要进行代码调用: Log.d(TAG,Globals.get().value1); Globals.get().value1 = "World"; Log.d(TAG,Globals.get().value1); Log.d(TAG,"Value2 = " + Globals.get().value2); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |