• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

android - 为移动应用程序的当前登录用户使用单例

[复制链接]
菜鸟教程小白 发表于 2022-12-11 17:30:03 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

创建一个单例来跟踪移动应用程序的当前登录用户是一个坏主意吗?下面的类(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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap