用户认证用SharedPreferences后,Activity间传递userId的最佳实践
Android登录后获取userId的最佳实践方案对比
方案1:在每个Activity中从SharedPreferences获取userId
- 优势:
- 不用每次跳转Activity都手动传参数,代码更清爽,减少重复工作
- 数据一致性高,所有页面拿的都是同一个来源的userId,不会出现Intent传参丢值、错值的情况
- 适配性强,不管用户从哪个入口进入页面(比如通知、桌面快捷方式),都能直接拿到userId,不会因为缺参数崩溃
- 不足:
- 每次读取都会触发SharedPreferences的IO操作,但这个开销极小,日常使用基本感知不到
方案2:通过Intent在Activity间传递userId
- 优势:
- 当前页面的userId来源一目了然,能明确看到是从上个页面传过来的
- 不足:
- 重复代码多,每次跳转都要写putExtra的逻辑,很容易忘写导致报错
- 容错性差,如果用户不走常规跳转路径(比如点通知进详情页),Intent里没有userId,页面直接炸
- 存在数据被意外篡改的风险,安全性不如全局存储的SharedPreferences
最佳实践建议
优先选方案1,而且可以再优化一下:封装一个全局的工具类统一处理userId的读取,比如写个UserManager:
object UserManager { fun getCurrentUserId(context: Context): String? { val sp = context.getSharedPreferences("login_state", Context.MODE_PRIVATE) return sp.getString("userId", null) } }
之后所有Activity直接调用UserManager.getCurrentUserId(this)就能拿到userId,既统一又省心,还能避免重复写读取SharedPreferences的代码。
内容的提问来源于stack exchange,提问作者katCat
相关产品推荐
相关产品推荐

