Android Clean架构中AccessToken加密的实现位置及相关疑问
关于Android KeyStore加密AccessToken的位置与线程建议
一、加密流程的最优位置:Repository层
直接把加密逻辑放在Repository类里是最合理的选择,原因如下:
- 贴合MVVM分层职责:Repository是数据层的核心入口,负责数据的获取、预处理、持久化,加密属于数据持久化前的必要处理,完全归属于数据层工作范畴。
- 避免重复代码:不管哪个ViewModel调用该Repository获取AccessToken,都会自动触发加密逻辑,无需在多个ViewModel中重复实现。
- 保障数据一致性:确保AccessToken从远程获取后,在上层(ViewModel/UI)拿到数据前就完成加密,不会出现漏加密的情况。
不推荐放在ViewModel层的原因:
ViewModel的核心职责是处理UI相关业务逻辑、维护UI状态,将加密这种数据层操作放入其中,会导致ViewModel职责混乱,违背单一职责原则,后续维护成本会大幅提升。
二、加密操作必须在后台线程执行
Android KeyStore的加密操作(哪怕是对称加密)会涉及系统安全模块的交互,属于耗时操作,如果在主线程执行,极易触发ANR(应用无响应)。
- 实际开发中可采用这些方案实现后台执行:
- Kotlin协程:用
withContext(Dispatchers.IO)包裹加密代码 - RxJava:切换到
Schedulers.io()线程执行加密 - 注意:避免使用过时的AsyncTask,优先选择协程这类现代异步方案。
- Kotlin协程:用
内容的提问来源于stack exchange,提问作者Dnveeraj
相关产品推荐
相关产品推荐

