OGeek|极客世界-中国程序员成长平台

标题: android - 为移动应用程序的当前登录用户使用单例 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 17:30
标题: android - 为移动应用程序的当前登录用户使用单例

创建一个单例来跟踪移动应用程序的当前登录用户是一个坏主意吗?下面的类(class)与我以前使用过的类似,而且效果很好,但我总觉得这不是最好的做事方式。

public class LoggedInUser {

   private static LoggedInUser ourInstance = null;
   User user;

   public static LoggedInUser getInstance() {
        return ourInstance != null ? ourInstance : new LoggedInUser();
    }

    private LoggedInUser () {
        user = new User();
    }

    public void setUser(User user) {
        this.user = user;
    }

    public User getUser() {
        return this.user;
    }
}

我在整个应用程序中经常使用用户的信息,有时用户对象并不小,因此在每个 View 之间传递对象听起来也不是最好的选择。什么是正常的做法? 用户每次使用该应用程序时都必须登录,所以我也不想将信息写入手机。



Best Answer-推荐答案


我发现了一个类似的问题( Is Singleton the best way to keep data in memory on an Android application? ),charlag 发布的答案实际上非常成熟:

I would use the following: Interface CurrentUser. CurrentUser has methods to retrieve and update user. User may be stored in DB, preferences or mixed. I would use Dagger to inject CurrentUser when needed. CurrentUser implementation should itself be a singleton, because Dagger doesn't guarantee qualities of singleton. Bonus points if your CurrentUser has something like RxJava stream or LiveData to keep observers up-to-date.

As an alternative to Singleton you may want to implement Fragment Holder pattern with retained fragments but in your situation Singleton seems better. Just make sure that you use interfaces and injection to not compromise testability and to keep your components separated.

不要将对象保留在 App 类中,除非正确实例化应用的依赖项至关重要 - 这听起来不错且容易,但也可能很快失控。

关于android - 为移动应用程序的当前登录用户使用单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39471078/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4