You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用户认证用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:35:59