我有一个带登录过程的应用程序,每次用户登录时,我都会将信息存储在LoginHolder类中,如下所示:
private static final java.lang.String TAG = tag(LoginHolder.class);
private static LoginHolder INSTANCE;
private SharedPreferences mSharedPreferences;
private LoginDetails mLoginDetails;
private UserInfo mUserInfo;
private LoginHolder(SharedPreferences sharedPreferences) {
mSharedPreferences = sharedPreferences;
}
public synchronized static LoginHolder instance(SharedPreferences prefs) {
if (INSTANCE == null) {
INSTANCE = new LoginHolder(prefs);
}
return INSTANCE;
}
public LoginDetails getLoggedUser() {
return mLoginDetails;
}
@DebugLog
public void setLoggedUser(@NonNull LoginDetails loginDetails) {
this.mLoginDetails = loginDetails;
}
@DebugLog
void setUserInfo(@NonNull UserInfo userInfo) {
mUserInfo = userInfo;
}
public UserInfo getUserInfo() {
return mUserInfo;
}
}
正如您所看到的,这是我使用Dagger注入的Singleton类。
现在我有两个活动,一个是活动A,第二个是活动B.一个启动活动B(概念上是它的父,一个主 - 细节关系)。现在,当B发生崩溃时,将重新创建A活动。我已经检查了日志记录,实际上整个应用程序都被重新创建(直到Application对象)。这会导致单身人士离开,从而也会消除用户信息。
到目前为止,我只能在这种情况下重现它,但我担心在其他情况下这可能会出乎意料地发生(任何想法?)
如何在内存中保留此信息(直到用户退出当然)?
答案 0 :(得分:0)
如何在内存中始终保留此信息?
创建一个应用程序类,而不是扩展android.app.Application
,并在该类中定义LoginDetails。
在这种情况下,此值将在整个应用生命周期之前保留在内存中。
示例:
public class MyApplication extends Application {
private static MyApplication instance;
private LoginDetails loginDetails;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public static LoginDetails getLoginDetails() {
return instance.loginDetails;
}
public static void setLoginDetails(LoginDetails loginDetails) {
instance.loginDetails = loginDetails;
}
}
在你的清单中
<application
android:name=".MyApplication"
.....
</application>