首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的SharedPreferences不能在应用程序启动后立即加载?

SharedPreferences是Android中的一种轻量级存储方式,用于存储少量的键值对数据。在应用程序启动后,我们可以通过SharedPreferences读取之前保存的数据,但是不能保证在应用程序启动后立即加载SharedPreferences数据。

这是因为在Android应用程序启动时,系统需要进行一系列的初始化操作,包括创建Application对象、启动主线程、加载资源等等。在这个过程中,如果立即加载SharedPreferences数据可能会对启动速度产生影响,因为读取文件操作需要一定的时间。

为了提升应用程序的启动速度,Android系统设计了一种异步加载SharedPreferences数据的机制。当我们第一次调用SharedPreferences的get方法时,系统会在后台进行文件的读取操作,并将结果缓存在内存中,下一次读取时则直接从内存中获取数据,从而避免了文件读取操作。

尽管SharedPreferences不能立即加载数据,但它依然是一种非常方便和高效的数据存储方式。适用于存储一些简单的配置参数、用户偏好设置等,而不适用于存储大量的复杂数据。

对于SharedPreferences的使用,腾讯云提供了云存储服务COS,可以用来保存大量的文件和数据。腾讯云COS是一种可扩展的对象存储服务,具有高可靠性、高可用性和高可扩展性。它支持多种数据存储方式,包括文件存储、图片存储、视频存储等,并提供了丰富的API和SDK供开发者使用。

腾讯云COS的优势包括:

  1. 高可靠性:数据在存储时会进行多次备份,确保数据不丢失。
  2. 高可用性:提供全球分布式部署,用户可以选择离自己最近的数据中心进行访问,提供低延迟的访问体验。
  3. 高可扩展性:支持无限扩展的存储容量和访问带宽,满足不同规模应用的需求。
  4. 安全性:提供多层次的数据安全防护,包括数据加密、访问控制、身份认证等。

推荐的腾讯云相关产品是腾讯云存储(COS)服务,具体产品介绍和使用方法可以参考腾讯云官方文档:腾讯云存储(COS)

总之,虽然SharedPreferences不能立即加载数据,但它仍然是Android开发中常用的存储方式之一。对于需要存储大量数据的场景,可以考虑使用腾讯云COS等云存储服务来提供高可靠性和高可扩展性的存储解决方案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android之SharedPreferences使用

,通过连接网络获取数据; Sharedpreferences是Android平台上一个轻量级的存储类,用来保存应用程序的各种配置信息,其本质是一个以“键-值”对的方式保存数据的xml文件,其文件保存在...这种方式获取的对象创建的文件 属于Activity,只能在该Activity中使用,且没有指定的文件名,文件名同Activity名字。...根据线上统计,SharedPreferences 大约会有万分之一的损坏率。 加载缓慢。...SharedPreferences 文件的加载使用了异步线程,而且加载线程并没有设置优先级,如果这个时候读取数据就需要等待文件加载线程的结束。...这就导致主线程等待低优先线程锁的问题,比如一个 100KB 的 SP 文件读取等待时间大约需要 50 ~ 100ms,并且建议大家提前用预加载启动过程用到的 SP 文件。 全量写入。

1.1K20

【面试黑洞】Android 的键值对存储有没有最优解?

所以,这到底是为什么? 啊,我知道了——因为 Google 是傻逼! SharedPreferences:不知不觉被嫌弃 大家好,我是扔物线朱凯。 键值对的存储在移动开发里非常常见。...说人话就是,我们需要把界面里显示的文字写到手机磁盘里,才能在程序崩溃、重新启动之后,通过读取文件的方式来查看。...为了不卡主线程,我显然应该做成异步的; 但这是马上就要显示的文字,如果做成异步的,就极有可能在程序崩溃的时候,后台线程还没来得及把文字存到磁盘。...我的猜测是这样的:MMKV 底层的原理是内存映射,而内存映射这种方式,它从内存往磁盘里同步写入的过程并不是实时的,也就是说并不是每次我们写入到映射的内存里就会立即从这块内存写入到磁盘,而是会有一些滞后。...SharedPreferences 的优势:不丢数据 好,那么说完了 MMKV,我来说一下 SharedPreferences,这个最传统的方案。 它有什么优势呢?——它没有优势。

1.3K20
  • 已中招!Android 基础面试常常吊死在这几个问题上……

    Android面试常常吊死的问题 1、面试官:Context它是什么,有什么用? 2、面试官:什么是Armv7? 3、面试官:为什么字节码不能在Android中运行?...15、面试官:什么是(ANR)错误,如何防止它在应用程序中发生? 16、面试官:SharedPreferences中的commit() 和apply() 有什么区别?...3、面试官:为什么字节码不能在Android中运行? 应聘者:Android 使用的是 DVM ( Dalvik 虚拟机)而不是 JVM ( Java 虚拟机)。 面试官:不错,答上来了!...Standard 是默认的,就是在不指定启动模式的时候用到的是这个!其他的在指定的时候使用! 面试官:你糊弄我呐?...例如,当需要加载手机中很多图片并要求拿到各种信息时,如照片的尺寸等,或读取非常大的 Json 文件时候,应该放到子线程中操作,当处理完毕后,通知主线程继续执行任务!

    2K20

    源码分析多进程下的SharedPreferences

    多进程下的SharedPreferences情况 先启动主进程并获取SharedPreferences对象,然后对值进行修改,然后启动其他进程并获取SharedPreferences对象,能取得修改后的值...总结下来就是,其他进程在启动时获取到的SharedPreferences的值只能是这个进程启动前这个值的最后值,即在进程启动后对值的修改只对当前进程有效,须等到进程重启或者app重启才能与其他进程进行“...那么为什么会这样子呢,笔者带大家从源码的角度来分析一下,我们来看一下关于SharedPreferences的源码。...对象的时候才会从磁盘中进行读取,读取后的值保存在了内存中,获取SharedPreferences对象优先从缓存中获取,再次创建时才会重新从磁盘中再次读取文件。...同时,MODE_MULTI_PROCESS的模式也已经被Google弃用,多进程之间的数据共享Google不推荐我们使用SharedPreferences,而是使用例如ContentProvider这种方式

    43310

    安卓第六夜 凡高的自画像

    在割掉自己的耳朵一部分后,画家给自己留下了这幅自画像。在当时,这幅画依然是无人问津。 ? 描述 我将创建一个新的Activity。这个界面允许用户输入本人的姓名和博客地址。这些输入数据将在会保存起来。...从一个Activity启动另一个Activity 我现在要把MainActivity和新的SelfEditActivity用Intent串联起来。...一个功能是监听按钮,在按钮点击后启动SelfEditActivity。另一个功能是从SharedPreferences中获得存储的键值,即用户名,再将用户名信息更新到界面上。...根据安卓的规定,MainActivity第一次运行,以及每次从暂停中复苏时,都会调用该方法。用户在SelfEditActivity修改返回后,就可以立即获得最新的数据。...onResume() 最后,用setText()方法,把新的数据加载到视图的TextView中。 运行 在"Edit Profile"中输入用户信息,提交后返回主页面,效果如下: ?

    1.2K70

    Android面试题大全

    有序广播和无序广播的区别 有序广播接收者们的优先级 有序广播的拦截和篡改 Android类加载器 Android的系统架构 Android应用程序结构 Android中的几种动画 Android内存溢出内存泄露...跨进程通讯的几种方式 Android中为什么子线程不能更新UI 如果不做这个校验,是不是我也可以正常在子线程更新UI 但是google为什么要这样去设计呢 ViewRootImp是在onActivityCreated...这样一来,对于程序当中的隐私数据可以不共享,从而更加安全。...Service,然后再将后启动的Service做stop处理 Android的数据存储 使用SharedPreferences存储数据 它是Android提供的用来存储一些简单配置信息的一种机制,...只能在同一个包内使用,不能在不同的包之间使用。

    1.3K50

    Flutter 3.7 新特性:介绍后台isolate通道

    如果您想了解如何使用此特性,请查看 GitHub 上的示例代码(PS: 原文示例代码不可用,这里我用另外一个官方大佬示例代替了。)。 用例 为什么有人想在后台 isolate 中使用插件呢?...或者某个应用可能正在进行大量计算,而开发人员不希望这些计算影响 UI。 在我帮助谷歌其他团队使用 Flutter 的过程中,随着产品的演进,最终会不可避免地遇到 root isolate 瓶颈。...因此,我们需要确保在框架中优化,并为开发者提供工具使其在必要时做更少的事。 下面是后台 isolate 一个人为的用例: 试想,一个应用程序可通过人工智能根据文本提示生成高分辨率图像。...SharedPreferences sharedPreferences = await SharedPreferences.getInstance(); print(sharedPreferences.getBool...感谢 Flutter 社区的支持,我希望你们都能找到这个新特性更惊艳的用途。

    4.2K40

    Android面试

    内存泄漏 1.为什么会产生内存泄漏?...使用SharedPreferences是有些限制的:只能在同一个包内使用,不能在不同的包之间使用。...3、双进程Service:让2个进程互相保护,其中一个Service被清理后,另外没被清理的进程可以立即重启进程 4、AlarmManager不断启动service。...后台进程:其中运行着执行onStop方法而停止的程序,但是却不是用户当前关心的,例如后台挂着的QQ,这样的进程系统一旦没了有内存就首先被杀死 空进程:不包含任何应用程序的程序组件的进程,这样的进程系统是一般不会让他存在的...中获取待启动的Activity的组件信息 3.创建类加载器,使用Instrumentation#newActivity()加载Activity对象 4.调用LoadedApk.makeApplication

    1K50

    SharedPreferences采用什么方式存储数据_sharedpreferences使用方法

    大家好,又见面了,我是你们的朋友全栈君。...sp数据文件从存储分区加载到内存过程分析 SharedPreferences工具类为我们提供了管理sp数据的接口,从而简化了数据存取操作。...其他几种类型的数据读取逻辑类似,这里可以看到,读取过程相对来说非常简单,当SharedPreferencesImpl实例创建完成后,sp的xml文件中的数据已经加载到内存中,所以这里获取时,只需要简单的内存查询即可...sp是在新建线程执行初始化工作,如果App启动时,在主线程执行大量的sp初始化工作,会创建大量的线程,且线程优先级同UI线程,这样会造成sp线程抢占UI线程资源,造成启动过慢等问题。...ui线程中使用sp数据要注意时效性,最好在使用之前,预加载到内存。 sp加载时,会在子线程执行,子线程的优先级等同于父线程,一定要注意加载的时间。

    1.7K20

    ★ Android基础篇 Android 数据存储与性能

    为什么使用 SP 它的优点是什么? 使用SP 为Android开发者提供了更为便利的存储方式,但是相对的他也是有一些缺点的。...当我们首次创建 SharedPreferences 对象时,会根据文件名将文件下内容一次性加载到 mMap(SharedPreferencesImpl 成员) 容器中,每当我们 edit 都会创建一个新的...(3) 读取频繁的 key 和不频繁的 key 尽量不要放在一起(如果整个文件本身就较小则忽略,为了这点性能添加维护得不偿失)。 (4) 尽量不要存放 JSON 和 HTML,这种可以直接文件缓存。...(5) 不要指望这货能够跨进程通信 Context.PROCESS 静态变量存储方式 因为这种方式我与我一个同事有了一些意见不一的地方,他喜欢使用静态变量。...经过我的多方查证 建议在具备下列全部条件的情况下,尽量使用静态变量: (1) 变量所包含的对象体积较大,占用内存较多。 (2) 变量所包含的对象生命周期较长。

    1.2K20

    微信MMKV团队:SharedPreferences替代方案的6个核心指标

    大家好,我是稳稳,一个曾经励志用技术改变世界,现在为随时失业做准备的中年奶爸程序员,与你分享生活和学习的点滴 从ANR终结者到性能碾压,MMKV凭什么成为微信的“秘密武器”?...引言:为什么连谷歌都放弃SharedPreferences? “SharedPreferences又双叒叕导致ANR了!”——这是无数Android开发者深夜崩溃的呐喊。...作为Android系统最古老的存储方案,SharedPreferences(简称SP)曾以简单易用著称,但在高并发、大数据场景下,其性能瓶颈和设计缺陷日益暴露。...无加载阻塞:初始化时直接映射文件,避免SP的异步加载死锁 Q2:MMKV的mmap会不会导致内存泄漏?...当你的App还在为0.1%的ANR率焦头烂额时,顶尖团队早已用MMKV实现零ANR、微秒级响应的终极方案。 立即行动: 1. GitHub搜索“Tencent/MMKV”获取源码 2.

    4810

    你真的懂SharedPreferences么

    省略 } 6.Context.MODE_MULTI_PROCESS 的加载模式,当应用指定的 targetSdkVersion 小于 API Level 11 时,则重新从文件中加载一遍数据到内存中,...并没达到跨进程的效果 7.SharedPreferences 的写入操作,首先是将源文件备份:mFile.renameTo(mBackupFile) 再写入所有数据,只有写入成功,并且通过 sync 完成落盘后...进程再次启动后如果发现该 SharedPreferences 存在 Backup 文件,就将 Backup 文件重名为源文件,原本未完成写入的文件就直接丢弃,这样最多也就是未完成写入的数据丢失,它能保证最后一次落盘...(真正落盘)成功后的数据。...考虑到主要使用场景是频繁地进行写入更新,我们需要有增量更新的能力:将增量 kv 对象序列化后,直接 append 到内存末尾;这样同一个 key 会有新旧若干份数据,最新的数据在最后;那么只需在程序启动第一次打开

    47020

    2020年最新字节、阿里、腾讯、爱奇艺等BAT Android社招高频面试题,押题99.98%!

    前言 找工作还是需要大家不要紧张,有我们干这一行的接触人本来就不多 难免看到面试官会紧张,主要是因为怕面试官问的问题到不上来,那时候不要着急 ,答不上了的千万不然胡扯一些,直接就给面试官说这块我还没接触到...3.强引用、软引用、弱引用和虚引用的区别 4.Handler 引起的内存泄露原因以及最佳解决方案 5.为什么系统不建议在子线程访问UI 6.Looper死循环为什么不会导致应用卡死 7.使用Handler...的postDealy后消息队列会有什么变化 ?...AS有什么工具可以检测内存泄露 7.性能优化,怎么保证应用启动不卡顿? 黑白屏怎么处理? 8.强引用置为null,会不会被回收?...11.LinearLayout、FrameLayout、RelativeLayout性能对比,为什么? 十三、JNI相关 1.对JNI是否了解 2.如何加载NDK库 ?

    71700

    Flutter开发 - 数据持久化

    数据持久化的应用场景有很多。比如,用户的账号登录信息需要保存,用于每次与 Web 服务验证身份;又比如,下载后的图片需要缓存,避免每次都要重新加载,浪费用户流量。...文档目录则是只有在删除应用程序时才会被清除的目录,通常被用来存放应用产生的重要数据文件。...如果我们需要持久化大量格式化后的数据,并且这些数据还会以较高的频率更新,为了考虑进一步的扩展性,我们通常会选用 sqlite 数据库来应对这样的场景。...SQLite 简介 本教程帮助您了解什么是 SQLite,它与 SQL 之间的不同,为什么需要它,以及它的应用程序数据库处理方式。...就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。 为什么要用 SQLite?

    1.6K40

    android IPC 通信(上)-sharedUserId&&Messenger「建议收藏」

    大家好,又见面了,我是全栈君。   ...user id的应用程序可以访问对方的数据(也就是说如果应用程序中的一个文件的权限是600,相同uid可以直接访问,反之则无法访问),并且设置成一个android:process就能够运行在一个进程中了...的相关类,使用该标识将会在你可以使用的application context上施加安全约束,如果需要加载的application不能被安全的加载进进程的话,将会抛出一个SecurityException...标识一起使用可能会将不安全的代码加载进进程,所以谨慎使用。   ...因为是进程之间的通信,所以可以在一个应用中开两个进程通信,也可以在两个应用中实现通信,我就以两个应用之间的通信为例。

    48310

    Flutter 构建完整应用手册-持久化

    共享偏好设置插件包装iOS上的NSUserDefaults和Android上的SharedPreferences,为简单数据提供持久存储。...0) + 1; 在上面的例子中,我们从counter键加载数据,如果它不存在,则返回0。...这可用于跨应用程序启动持续保存数据或从互联网上下载数据并保存以供以后脱机使用。 为了将文件保存到磁盘,我们需要将path_provider插件与dart:io库结合使用。...当计数器发生变化时,我们需要在磁盘上写入数据,以便在应用程序加载时再次读取它。 因此,我们需要问:我们应该在哪里存储这些数据?...在iOS上,这对应于NSTemporaryDirectory()返回的值。 在Android上,这是getCacheDir()返回的值。 文档目录:应用程序的目录,用于存储只有它可以访问的文件。

    1.5K20

    SharedPreferences还能再优化吗?

    我回答对SP做过一些优化,减少了一些ANR的产生,具体的做法是,在sp.putXX或getXX之前加一个另外的HashMap来做为缓冲层,但是为什么要这样做,我没有绝对的把握。...SP的初始化 首先我们的SP一般是这么用的 SharedPreferences sharedPreferences = context.getSharedPreferences("spName", Context.MODE_PRIVATE...代码有点长, 为了方便阅读,我直接在代码中写注释解读。...,后者传的Runnable对象,在里面有个判断,如果为null就需要同步等待文件读写完成,如果非null,就立即返回读写完成,使线程恢复。...apply中awaitCommit是干什么的 最后看下这个awaitCommit 是干什么的,简单点说,是为了保证本次apply操作一定会被执行一次。 为什么这么说。

    66410

    让源码告诉你:Android 不要滥用 SharedPreferences(上)

    文件的存储位置是在应用程序包名下 shared_prefs 目录内。...) 3、SharedPreferences 的数据加载过程 终于说到 SharedPreferences 数据操作的相关内容了,这部分也是我们要重点讨论的内容,因为这里面或多或少存在一些暗坑,如果对它不足够了解...的成员 mMap,声明如下: private Map mMap; 跟踪到这里 SharedPreferences 的首次加载机制就已经明确了,每个 SharedPreferences...分析到这里关于 SharedPreferences 数据提交过程:commit 发生在当前线程,apply 发生在工作线程,如果要保证 I/O 操作不阻塞 UI 线程我们可以优先考虑使用 apply 来提交修改...(参照 SharedPreferences 初始化时会开启异步线程读取对应文件,如果此时耗时较长,当对其进行相关数据操作时会导致线程等待) 3、读取频繁的 key 和 不频繁的 key 尽量不要放在一起

    1.4K20

    锦囊篇|一文摸懂SharedPreferences和MMKV

    另外接下来的一句话仅代表了我的个人意见,也是为什么我只写SharedPreferences和MMKV两者比较的原因,因为我个人认为SQLite和他们不太属于同一类产品,所以比较的意义上来说就趋于普通。...其实你能够从一个判断的变量名能够看出会对数据的写回方式有一个选择,也就是部分写回和全部写回的策略之选,那这就是第一个原因为什么MMKV的综合性能能够强过SharedPreferences。...// 追溯后可以发现会出现一个文件的写入。...考虑到主要使用场景是频繁地进行写入更新,我们需要有增量更新的能力:将增量 kv 对象序列化后,直接 append 到内存末尾;这样同一个 key 会有新旧若干份数据,最新的数据在最后;那么只需在程序启动第一次打开...总结 从源码分析完之后,和SharedPreferences相比,重新整理后可以总结为以下几点的突破: mmap的使用: 内存映射的技术的使用,减少了 SharedPreferences 的拷贝和提交的时间消耗

    1K40
    领券