我正在制作一个 Android 应用程序,其中包含本地公交车的时刻表。 时间表不止一个,具体使用哪一个取决于当天。
如果是假期,我必须使用特殊的时间表,所以我想知道什么时候是假期,什么时候不是。
问题是我正在创建一个类来处理这个问题,它将尝试从内存或 Web API 中检索信息。然后一些其他类将能够与该类进行通信,但对我来说似乎没有必要拥有该类的多个实例,我可以只创建一个实例并与其余类共享。
这个类可以是一个Singleton吗?或者如果我创建一个普通类会更好?
最佳答案
在您的情况下(从内存中检索信息),一定要避免使用单例类,因为它很可能与您的 Activity 上下文相关联。
你的类将有一个类的静态引用,因此
- 它会在不需要时保存在内存中。
- 单例可能会被重新实例化,或者可能会使用过时的实例,以及新的 Activity 安装。您将失去对当前变量的控制。
- 同一 Activity 类的不同实例极有可能与此类发生冲突。
同一个activity类的几个实例化的例子:
- 更改设备方向。
- 从网络浏览器、Google Play、文件浏览器 intent 运行应用。
此外,在某些时候,当您根据用户评论添加功能时,您的应用程序会增长,您可能希望重构您的类,将其分解为子类,将其一些方法放入单独的线程中。这将不再容易做到。
当应用程序很小且未经测试时,它可能看起来很有趣,但后来,特别是在 Android 中,您会遇到一个具有不可预测且难以检测的错误的夜蛾。
由于 Android 重新创建 Activity 类的特殊方式,通过 onCreate、onResume 等,当应用程序开始过自己的生活时,您将陷入噩梦。
您将无法再依赖当前单例实例实际上属于您当前 Activity 的假设。
您可以在方向之间切换或从不同的入口点(启动器、最近使用的应用程序、google play)运行您的应用程序,并且它可能会重用实际为不同 Activity 实例化准备的变量。
如果您只需要该类的一个实例,只需在 onCreate 方法中创建该类的一个实例 - 这将使应用程序更易于管理。
关于java - 这是使用 Singleton 的好理由吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51200144/