Pur*_*ari 8 java static android
(之前可能会提出这个确切的问题.我无法通过搜索找到它.如果你发现它有重复的标记.)
在Android应用程序中,在这些情况下将对象存储在静态字段中是不是很糟糕?
Application类中的实例变量中.然后需要数据的类可以从中获取数据Application.Context的等它是不好的做法,存储Context(例如,一个引用Activity或Application静态字段)?这可以在需要例如a LayoutInflater或资源的类中使用.目前,我将Contexts 传递给需要它们作为参数的方法.Mar*_*ini 16
是的,是的.:)
静态字段.过度使用静态字段存在很多问题.不仅它们通过有趣的边缘访问速度较慢,而且它们也很容易在一夜之间被Android破坏,并且通常很难检查它们的所有引用或用if填充你的getter/setter(sSomeStatic == null ){return new SomeStatic()}.可以将一个静态引用存储到一个名为(例如)ApplicationData的类中,你可以存储一些值,嘿,我们偶尔需要一些全局变量,但它很容易滥用它,每当我检查新的Android时我都会皱眉开发者的源代码.
是的,将您的Application实例存储为单例模式并使用它,但不要仅仅因为您可以执行YOURAPP.getInstance()而向Application实现添加200个静态字段.TomeLazyValueYouAddedHere();
那很不好.它会导致不良做法,并且比访问硬引用的好设计要慢.
我可以永远继续下去,但有很多StackOverflow讨论(有些激烈!).如果你在这里,我假设你要求经验; 我在不同的项目中已经做了几年的Android,我的经验一直是静态越少越好.
现在上下文 ......哦,上下文.不要将Context存储在硬引用中.或者你会泄漏记忆.活动引用了View和许多其他内容.如果您存储了Context,那么您将存储活动,并且事情会变得糟糕.学习传递上下文,尽可能使用应用程序上下文,如果需要传递它,那么就是出于很好的理由.大多数情况下,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;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,是的,您将获得相同的应用程序上下文相同的静态引用.
| 归档时间: |
|
| 查看次数: |
3355 次 |
| 最近记录: |