当前位置: 首页 > 面试题库 >

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

仉昂熙
2023-03-14
问题内容

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

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

问题答案:

是的,是的。:)

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


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

那很不好。这会导致不良做法,并且比在访问硬引用时进行好的设计要慢。

我可以永远继续下去,但是对此有很多讨论(有些很热烈!)。如果您在这里,我假设您是在寻求经验。我在不同的项目中使用Android已有两年了,而我的经验始终是Static(静态)越少越好。

现在是上下文
……哦上下文。永远不要在硬参考中存储上下文。否则您将泄漏内存。一个活动引用了View和许多其他东西。如果存储上下文,则存储的是活动,然后事情就此恶化。学习传递上下文,尽可能使用应用程序上下文,如果需要传递它,则出于非常充分的理由。大多数情况下,App上下文足以获取资源,字符串等。如果要存储Context,请始终存储context.getApplicationContext();。永远不要存储静态活动上下文。您也可以在Google上搜索,而StackOverflow有一些不错的答案。

如果您只能负担一本Android书籍,那么请购买BNR。甚至Android有时也会不时发布新的SDK,这些概念是完全有效的,并且作者使用的模式是处理Activity,Contexts,Fragments等的正确方法。

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

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

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



 类似资料:
  • 应用数据。当应用程序运行时,将应用程序数据保存在类中的静态变量中是不好的吗?目前,我将数据存储在类中的一个实例变量中。然后,需要数据的类可以从.获得数据 等等,在静态字段中存储(例如对或的引用)是不是很糟糕?这可以用于需要或资源的类中。目前,我正在将传递给需要它们作为参数的方法。

  • 问题内容: 我习惯在所有程序中广泛使用 静态变量 ,尤其是在使用Android时。我倾向于使用它们,因为有时 通过Intents发送10个或更多的值 会很 麻烦 。因此,我只是将 它们声明为静态 变量,并通过使用“点”运算符轻松地在其他类中访问它们。使用静态变量的另一个原因是当我要在整个应用程序中使用 Utility类时 。就像我在下面给出的代码一样,它可以帮助我 在不同的活动中使用变量 。 Ut

  • 我有一个静态变量在我的几个函数,我如何保留这些静态变量的值,当一个意外的重新启动在程序中发生?

  • 问题内容: 假设以下内容: parsedUntil是否被视为静态变量?我注意到我无法在此静态函数中将其声明为静态。 后续问题:我读到一个静态变量只会被初始化一次。这是否意味着我第一次调用函数A()时,该值将设置为零,但是每隔一次我调用A()时,该行将被省略吗? 问题答案: 不,它不是静态变量。这是一个局部变量。方法中声明的任何变量都是局部变量。如果需要静态变量,则必须在方法外声明它: 没有办法声明

  • 问题内容: 我已阅读以下讨论: 如果私有帮助器方法可以是静态的,则它们应该是静态的;如果它们的类没有成员变量,则所有方法应该是静态的。 似乎人们通常会接受静态方法,但由于以下两个原因,对此有些怀疑: 他们很难测试。 他们违反了OO原则。(一个人说,它们是函数,而不是方法。) 最可接受的静态方法是 私有静态 方法。但是,为什么为什么根本不存在静态方法呢?在什么情况下,它们是最优先采用的方法? 问题答

  • 问题内容: 我已经定义了一个对象并声明了一个静态变量。在该方法中,当我尝试打印实例和类变量时,两者都打印相同的值。 不是实例变量吗?它应该打印0而不是50吗? 问题答案: 不,只有一个变量-您尚未声明任何实例变量。 不幸的是,Java允许您访问静态成员,就像通过相关类型的引用访问静态成员一样。这是IMO的设计缺陷,某些IDE(例如Eclipse)允许您将其标记为警告或错误- 但这是语言的一部分。您