【问题标题】:Is it safe to store data in a kotlin object?将数据存储在 kotlin 对象中是否安全?
【发布时间】:2019-05-08 10:21:30
【问题描述】:

我有一个关于 kotlin 中的对象的问题,到目前为止我找不到令人满意的答案。 基本上是以下场景:我有一些用户数据,我想通过整个应用程序提供这些数据,而不必通过活动传递。

为了实现这一点,我创建了一个具有两个属性的对象,这些属性在启动活动中使用用户数据进行实例化。这是一种安全的方式来存储用户数据并使用户的数据可用于所有活动,还是会在途中丢失?

例子:

object CurrentUserManager {
    lateinit var userId: String,
    lateinit var userName: String
    }

LoginActivity {
    ...
    onCreate(...){
        val user = ApiCall.Login();
        CurrentUserManager.userId = user.id
        CurrentUserManager.userName = user.name
    }
}

MainActivity {
    ...
    onCreate(...){
        Toast.makeText(this, "Hello ${CurrentUserManager.userName} with ID: ${CurrentUserManager.userId}", Toast.LENGTH_SHORT).show()
    }
}

这是不安全/不好的做法吗?如果是,为什么以及我应该使用哪种模式来实现预期结果?

谢谢, 狮狐

【问题讨论】:

    标签: android object kotlin singleton


    【解决方案1】:

    简短回答:只要您的 Android 进程不结束,它就是安全的。

    长答案:这归结为关于 Java 中单例和静态变量的生命周期的讨论。这个问题已经有了一些答案,所以我不会在这里重复这些:

    【讨论】:

    • 谢谢,这就是我需要知道的一切
    【解决方案2】:

    使用intent put extras或维护一个静态对象

    【讨论】:

    • "我有一些用户数据,我想通过整个应用程序提供这些数据,而不必通过活动传递它。"使用 intent.putExtra() 正是我想要避免的
    • 我已经在使用静态 kotlin 对象,想知道这种方式是否安全,所以你的回答在这里对我没有帮助
    • 使用静态是处理此问题的一种简单有效的方法,但安全依赖于您自己。我也用这个方法。如果你想要更好的方法,就像你说的我帮不了你。
    • 请仔细阅读...这是 Kotlin 而不是 Java。没有静态关键字。等价于java的静态是伴生对象/对象
    猜你喜欢
    • 2010-12-19
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多