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

Android:不使用Content Provider/Loaders,屏幕旋转时如何保留单例数据库数据?

Android屏幕旋转后保留单例数据库数据(禁用Content Provider/Loaders)

这道面试题曾经把我卡得死死的,今天分享出来帮大家避坑:在Android中,不使用Content Provider或Loaders,如何在Activity屏幕旋转后保留单例数据库的数据?

我当时的踩坑思路

  • 第一反应就是用ContentProvider搭配CursorLoader——毕竟这是官方推荐的处理数据库数据和生命周期的常规操作,但面试官直接否决了这个方案。
  • 之后我想过把单例DB查询返回的Cursor存在onSaveInstanceState的Bundle里,结果很快发现根本行不通:Cursor是无法直接序列化存入Bundle的,当时完全没了头绪。
  • 我还忍不住问面试官:“单例数据库不是实际开发里不推荐使用吗?”对方笑着回应:“没错,但这只是面试场景~”

面试场景下的可行解决方案

其实核心是避开直接保存Cursor,转而保存查询的关键参数,在重建后的Activity中重新查询单例数据库:

  1. 在onSaveInstanceState方法中,把查询所需的核心条件(比如目标表名、筛选条件selection、排序规则sortOrder等)存入Bundle——这些都是字符串、整数这类可序列化的基本类型,能正常被Bundle保存。
  2. 当Activity因屏幕旋转重建后,在onCreate或onRestoreInstanceState中取出这些参数,调用单例数据库的查询方法重新获取数据即可。
  3. 另外,还有一种取巧的思路:给Activity的android:configChanges属性添加orientation|screenSize,这样屏幕旋转时Activity不会触发重建,自然就能保留单例数据库的数据。不过这种方式在实际开发中要谨慎使用(会跳过系统的生命周期重建逻辑,可能引发其他适配问题),但面试场景下可以作为一种备选思路提及。

这样既符合面试官禁用Content Provider/Loaders的要求,又能实现屏幕旋转后的数据保留,亲测能过面试~


内容的提问来源于stack exchange,提问作者eric

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:54:51