【问题标题】:Advise about static fields on singleton class关于单例类的静态字段的建议
【发布时间】:2017-10-10 07:00:00
【问题描述】:

我正在处理一个项目,我想在我的应用程序中传输数据。这些数据位于数据模型类上,因此发送带有意图的参数会使代码变得庞大且难以跟上,因为这些类的结构很复杂。

所以基本上我决定在一个扩展 Application 的单例类上创建这些类的静态实例,这有助于我轻松地设置和从这些对象获取数据。它有效。

问题:

我有点新,所以我不知道这是否真的是一个好方法。我读了一些关于它的东西here,但是按照建议将它们存储在本地数据库中并不适合我的情况。除了 Android 决定杀死你的应用程序之外,我对单例类的方法是否涉及任何危险?

欢迎所有建议和建议。

提前致谢。

【问题讨论】:

  • 没有。没有什么是危险的。如果要存储大量数据,请使用数据库。卸载应用程序时数据将丢失。当您的应用程序启动时,该应用程序类将首先启动。因此不会丢失任何数据。
  • 我认为没有
  • @Piyush 请看下面的答案
  • @Denny 请看下面的答案
  • OP 声明“除了当 Android 决定终止您的应用程序时涉及的任何危险”,所以我假设 OP 知道当应用程序被终止时数据将被丢弃。

标签: java android architecture singleton


【解决方案1】:

强制停止或终止应用后,您将丢失数据。

仅用于演示,您可以通过执行以下步骤来验证这一点。

  1. 在您的应用程序类中创建一个静态 int public static int count = 0;
  2. 记录 int 的值并将其递增 Log.d("COUNT", String.valueOf(count)); count++;
  3. 销毁应用(从最近的应用向左/向右滑动)或从应用设置中“强制停止”
  4. 重新启动应用并查看 COUNT 的日志 它将是 0,而不是 1

    package com.test.app;
    
    import android.app.Application;
    import android.util.Log;
    
    public class MyApplication extends Application {
    
       public static int count = 0;
    
       @Override
       public void onCreate() {
    
          Log.d("COUNT", String.valueOf(count));
          count++;
      }
    }
    

最好将数据保存在某个地方。 Android 会杀死进程,它仅取决于 RAM 状态和文档中描述的其他因素。在现实世界中,某些设备的应用程序“过载”,因此终止后台进程是正常情况。是的,如果用户随后决定将应用程序置于前台 - 操作系统会恢复其堆栈,包括应用程序实例,但是除非您将其持久化,否则不会有您依赖的静态数据。

请阅读this 链接上的Limitations & Warnings 部分。

http://www.developerphil.com/dont-store-data-in-the-application-object/

【讨论】:

  • 确实是一篇很有帮助的文章
  • 谢谢。如果也添加了一个示例
  • 我在 Application 类上的数据确实是可变的。我打开了 9 个应用程序,当我将我的应用程序放在前台时它崩溃了。我想我会使用意图或磁盘
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多