gpt4 book ai didi

java - 将数据保存在静态变量中是不好的做法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:56:16 25 4
gpt4 key购买 nike

在 Android 应用程序中,在这些情况下将对象存储在静态字段中是否是一种不好的做法?

  1. 应用程序数据。在应用程序运行时将应用程序数据保存在类的静态变量中是否不好?目前,我将数据存储在我的 Application 类中的一个实例变量中。然后需要数据的类可以从Application中获取数据。
  2. Context 存储 Context(例如对 Activity 的引用)是否是不好的做法> 或静态字段中的 Application)?这可以用于需要例如LayoutInflater 或资源。目前,我将 Context 传递给需要它们作为参数的方法。

最佳答案

是的,是的。 :)

静态字段。过度使用静态字段会带来很多问题。它们不仅访问速度较慢,而且很容易被 Android 在一夜之间破坏,而且到处检查它们的引用或用 if (sSomeStatic == null) { 返回新的 SomeStatic()}。可以存储对一个名为(例如)ApplicationData 的类的静态引用,你可以在其中存储一些值,嘿,我们时不时需要一些全局变量,但它很容易被滥用,每次检查新的 Android 时我都会皱眉开发人员的源代码。

是的,以单例模式存储您的 Application 实例并使用它,但不要仅仅因为您可以执行 YOURAPP.getInstance().SomeLazyValueYouAddedHere(); 就向您的 Application 实现添加 200 个静态字段;

这很糟糕。它会导致不良做法,并且比访问硬引用的良好设计慢。

我可以永远继续下去,但是有很多关于这个的 StackOverflow 讨论(有些很激烈!)。如果您在这里,我假设您是在寻求经验;我在不同的项目中从事 Android 多年,我的经验是静态越少越好。

现在是上下文……哦是上下文。永远不要将 Context 存储在硬引用中。否则你会泄漏内存。一个 Activity 引用了 View 和许多其他东西。如果您存储上下文,那么您将存储 Activity ,然后事情就会变得糟糕。学习传递 Context,尽可能使用 Application Context,如果你需要传递它,那么这样做是有充分理由的。大多数情况下,App 上下文足以获取资源、字符串等。如果您要存储上下文,请始终存储 context.getApplicationContext(); 永远不要存储静态 Activity 上下文。你也可以用谷歌搜索这个,StackOverflow 有一些很好的答案。

如果您买得起一本且只有一本 Android 书籍,请购买 BNR一。尽管 Android 可能会不时发布新的 SDK,但这些概念是完全有效的,作者使用的模式是处理 Activity 、上下文、 fragment 等的正确方法。

更新您的应用程序应如下所示:

public class YourApp extends Application {
private static YourApp sInstance;
public YourApp() {
super();
sInstance = this;
}
public static YourApp getInstance() {
return sInstance;
}
}

在那种情况下,是的,您将获得对相同 App Context 的相同静态引用。

关于java - 将数据保存在静态变量中是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19774075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com