将数据存储在 kotlin 对象中是否安全?
Is it safe to store data in a kotlin object?
我有一个关于 kotlin 中的对象的问题,到目前为止我找不到满意的答案。
它基本上是以下场景:我有一些用户数据,我想通过整个应用程序提供这些数据,而不必通过活动传递它。
为此,我创建了一个具有两个属性的对象,这些属性在启动时用用户数据实例化 activity。这是存储用户数据并使用户数据可用于所有活动的安全方式,还是会在途中丢失?
示例:
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()
}
}
这是 unsafe/bad 实践吗?如果是,为什么以及我应该使用哪种模式来实现预期结果?
谢谢,
狮狐
使用 intent 放置额外内容或维护静态对象
简短回答:只要您的 Android 进程没有结束,它就是安全的。
长答案:这归结为 Java 中关于单例和静态变量生命周期的讨论。这个问题已经有了一些答案,所以我不会 re-iterate 那些:
- Android static object lifecycle
- Is it safe to use static class variables in an android application
- Lifetime of a static variable in Android
我有一个关于 kotlin 中的对象的问题,到目前为止我找不到满意的答案。 它基本上是以下场景:我有一些用户数据,我想通过整个应用程序提供这些数据,而不必通过活动传递它。
为此,我创建了一个具有两个属性的对象,这些属性在启动时用用户数据实例化 activity。这是存储用户数据并使用户数据可用于所有活动的安全方式,还是会在途中丢失?
示例:
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()
}
}
这是 unsafe/bad 实践吗?如果是,为什么以及我应该使用哪种模式来实现预期结果?
谢谢, 狮狐
使用 intent 放置额外内容或维护静态对象
简短回答:只要您的 Android 进程没有结束,它就是安全的。
长答案:这归结为 Java 中关于单例和静态变量生命周期的讨论。这个问题已经有了一些答案,所以我不会 re-iterate 那些:
- Android static object lifecycle
- Is it safe to use static class variables in an android application
- Lifetime of a static variable in Android