java - 这是使用 Singleton 的好理由吗?

标签 java android singleton

我正在制作一个 Android 应用程序,其中包含本地公交车的时刻表。 时间表不止一个,具体使用哪一个取决于当天。

如果是假期,我必须使用特殊的时间表,所以我想知道什么时候是假期,什么时候不是。

问题是我正在创建一个类来处理这个问题,它将尝试从内存或 Web API 中检索信息。然后一些其他类将能够与该类进行通信,但对我来说似乎没有必要拥有该类的多个实例,我可以只创建一个实例并与其余类共享。

这个类可以是一个Singleton吗?或者如果我创建一个普通类会更好?

最佳答案

在您的情况下(从内存中检索信息),一定要避免使用单例类,因为它很可能与您的 Activity 上下文相关联。

你的类将有一个类的静态引用,因此

  1. 它会在不需要时保存在内存中。
  2. 单例可能会被重新实例化,或者可能会使用过时的实例,以及新的 Activity 安装。您将失去对当前变量的控制。
  3. 同一 Activity 类的不同实例极有可能与此类发生冲突。

同一个activity类的几个实例化的例子:

  1. 更改设备方向。
  2. 从网络浏览器、Google Play、文件浏览器 intent 运行应用。

此外,在某些时候,当您根据用户评论添加功能时,您的应用程序会增长,您可能希望重构您的类,将其分解为子类,将其一些方法放入单独的线程中。这将不再容易做到。

当应用程序很小且未经测试时,它可能看起来很有趣,但后来,特别是在 Android 中,您会遇到一个具有不可预测且难以检测的错误的夜蛾。

由于 Android 重新创建 Activity 类的特殊方式,通过 onCreate、onResume 等,当应用程序开始过自己的生活时,您将陷入噩梦。

您将无法再依赖当前单例实例实际上属于您当前 Activity 的假设。

您可以在方向之间切换或从不同的入口点(启动器、最近使用的应用程序、google play)运行您的应用程序,并且它可能会重用实际为不同 Activity 实例化准备的变量。

如果您只需要该类的一个实例,只需在 onCreate 方法中创建该类的一个实例 - 这将使应用程序更易于管理。

关于java - 这是使用 Singleton 的好理由吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51200144/

相关文章:

java - 如何使用 xml 配置将服务 bean 传递到 spring boot Controller

java - Bean 命名 - Spring in Action 有错误吗?

java - 是否有一个包可以实现非常大的高精度数字?

ios - 核心数据上下文和单例数据 Controller

java - BufferedReader 创建奇数字符,我应该使用哪种字符编码?

java - 查找谷歌地图上是否存在叠加层

Android 4.0 ImageView setImageBitmap 不工作

android - 如何从 firebase 数据库中提取所有在线用户的用户名。

android - 如何在所有 Activity 中使用一个加载窗口实例

angular - 跨所有组件共享模态