将用户状态保存在内存中

时间:2016-11-30 13:14:35

标签: android

我有一个带登录过程的应用程序,每次用户登录时,我都会将信息存储在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对象)。这会导致单身人士离开,从而也会消除用户信息。

到目前为止,我只能在这种情况下重现它,但我担心在其他情况下这可能会出乎意料地发生(任何想法?)

如何在内存中保留此信息(直到用户退出当然)?

1 个答案:

答案 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>