SharedPreferences 作为轻量级存储在 Android 应用中是必不可少的,但依旧存在较大的优化空间,和尚在做性能优化时尝试了新的利器 腾讯 MMKV,和尚今天按如下脑图顺序尝试学习和简单分析一下;
SharedPreferences 作为轻量级存储在 Android 应用中是必不可少的,但依旧存在较大的优化空间,小菜在做性能优化时尝试了新的利器 腾讯 MMKV,小菜今天按如下脑图顺序尝试学习和简单分析一下;
1.SharedPreferences首次创建,实际类型是SharedPreferencesImpl,系统会将每个 SharedPreferences 文件对应的操作对象(实际为 SharedPreferencesImpl)进行缓存,SharedPreferencesImpl和sp文件路径file映射关系存放在Arraymap中,api28以后,之前是HashMap
这是我在网上找到的一份 Android 键值对存储方案的性能测试对比(数越小越好):
MMKV——基于 mmap 的高性能通用 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。 https://github.com/Tencent/MMKV/blob/master/readme_cn.md
链接:https://www.jianshu.com/p/5fcef7f68341
欢迎使用 Jetpack DataStore,这是一个经过改进的全新数据存储解决方案,旨在替代原有的 SharedPreferences。Jetpack DataStore 基于 Kotlin 协程和 Flow 开发,并提供两种不同的实现: Proto DataStore 和 Preferences DataStore。其中 Proto DataStore,可以存储带有类型的对象 (使用 protocol buffers 实现);Preferences DataStore,可以存储键值对。在 DataStore 中,数据以异步的、一致的、事务性的方式进行存储,克服了 SharedPreferences 的大部分缺点。
昨天我们深入了解了部分SharedPreferences的知识点,今天继续说说SharedPreferences,并简单谈下有没有什么替代品可以解决SharedPreferences的那些问题。
还记得某天,由于后台接口更新导致 App 本地数据库也要随之更新,因为之前项目着急,果断采用 SQLite,最直接导致只要后台接口更新,APP 就得更新。
程序的终归目的还是操作数据来达到实现一些特定功能,在Android中,我们可以通过操作文件或者使用SharedPreferences还有数据库来保存一些数据。首先来看一下Android文件的读写:
MMKV 是基于 mmap 内存映射的移动端通用 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015 年中至今,在 iOS 微信上使用已有近 3 年,其性能和稳定性经过了时间的验证。近期已移植到 Android 平台。在腾讯内部开源半年之后,得到公司内部团队的广泛应用和一致好评。现在一并对外开源: https://github.com/tencent/mmkv 欢迎 Star、提 Issue 和 PR。 MMKV 源起 在微信客户端的日常运营中,时
瞬时数据:指那些存储在内存当中,有可能会因为程序广播或其他原因导致内存被回收而丢失的数据。 数据持久化:指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不丢失。 保存在内存中的数据是瞬时数据,保存在手机设备中的数据是处于持久状态的,持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行切换。 1、持久化技术有哪些 Android系统中主要提供了三种方式用于简单地实现数据持久化功能: 文件存储:是Android中最基本的一种数据存储方式。不对存储内
.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height:1.5;margin-top:35px;margin-bottom:10px;padding-bottom:5px}.markdown-body h1{font-size:30px;margin-bottom:5px}.markdown-body h2{padding-bottom:12px;font-size:24px;border-bottom:1px solid #ececec}.markdown-body h3{font-size:18px;padding-bottom:0}.markdown-body h4{font-size:16px}.markdown-body h5{font-size:15px}.markdown-body h6{margin-top:5px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body img{max-width:100%}.markdown-body hr{border:none;border-top:1px solid #ddd;margin-top:32px;margin-bottom:32px}.markdown-body code{word-break:break-word;border-radius:2px;overflow-x:auto;background-color:#fff5f5;color:#ff502c;font-size:.87em;padding:.065em .4em}.markdown-body code,.markdown-body pre{font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75}.markdown-body pre>code{font-size:12px;padding:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#f8f8f8}.markdown-body a{text-decoration:none;color:#0269c8;border-bottom:1px solid #d1e9ff}.markdown-body a:active,.markdown-body a:hover{color:#275b8c}.markdown-body table{display:inline-block!important;font-size:12px;width:auto;max-width:100%;overflow:auto;border:1px solid #f6f6f6}.markdown-body thead{background:#f6f6f6;color:#000;text-align:left}.markdown-body tr:nth-child(2n){background-color:#fcfcfc}.markdown-body td,.markdown-body th{padding:12px 7px;line-height:24px}.markdown-body td{min-width:120px}.markdown-body blockquote{color:#666;padding:1px 23px;margin:22px 0;border-left:4px solid #cbcbcb;background-color:#f8f8f8}.markdown-body blockquote:after{display:block;content:""}.markdown-body blockquote>p{margin:10px 0}.markdown-body ol,.markdown-body ul{padding-left:28px}.markdown-body ol li,.markdown-body
MMKV的出现是为了替代SharedPreferences的轻量级存储解决方案。SharedPreferences需要被替换的原因主要是存在下述问题:
目录介绍01.整体概述说明1.1 项目背景介绍1.2 遇到问题记录1.3 基础概念介绍1.4 设计目标1.5 产生收益分析02.市面存储方案2.1 缓存存储有哪些2.2 缓存策略有哪些2.3 常见存储方案2.4 市面存储方案说明2.5 存储方案的不足03.存储方案原理3.1 Sp存储原理分析3.2 MMKV存储原理分析3.3 LruCache考量分析3.4 DiskLru原理分析3.5 DataStore分析3.6 HashMap存储分析3.7 Sqlite存储分析3.8 使用存储的注意点3.9 各种数据存
MMKV 开源当日即登Github Trending日榜,三日后荣登周榜。MMKV 在腾讯内部开源半年,得到公司内部团队的广泛应用和一致好评。 MMKV 是基于 mmap 内存映射的移动端通用 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015 年中至今,在 iOS 微信上使用已有近 3 年,其性能和稳定性经过了时间的验证。近期已移植到 Android 平台,移动端全平台通用,并全部在 Github 上开源。 MMKV 源起 在微信客户端的日常运营
《移动互联网技术》课程是软件工程、电子信息等专业的专业课,主要介绍移动互联网系统及应用开发技术。课程内容主要包括移动互联网概述、无线网络技术、无线定位技术、Android应用开发和移动应用项目实践等五个部分。移动互联网概述主要介绍移动互联网的概况和发展,以及移动计算的特点。无线网络技术部分主要介绍移动通信网络(包括2G/3G/4G/5G技术)、无线传感器网络、Ad hoc网络、各种移动通信协议,以及移动IP技术。无线定位技术部分主要介绍无线定位的基本原理、定位方法、定位业务、数据采集等相关技术。Android应用开发部分主要介绍移动应用的开发环境、应用开发框架和各种功能组件以及常用的开发工具。移动应用项目实践部分主要介绍移动应用开发过程、移动应用客户端开发、以及应用开发实例。 课程的教学培养目标如下: 1.培养学生综合运用多门课程知识以解决工程领域问题的能力,能够理解各种移动通信方法,完成移动定位算法的设计。 2.培养学生移动应用编程能力,能够编写Andorid应用的主要功能模块,并掌握移动应用的开发流程。 3. 培养工程实践能力和创新能力。 通过本课程的学习应达到以下目的: 1.掌握移动互联网的基本概念和原理; 2.掌握移动应用系统的设计原则; 3.掌握Android应用软件的基本编程方法; 4.能正确使用常用的移动应用开发工具和测试工具。
SharedPreferences介绍 在Android开发中,经常需要将少量简单类型数据保存在本地,如:用户设置。这些需要保存的数据可能一两个字符串,像这样的数据一般选择使用SharedPreferences来保存。 SharedPreferences:一个轻量级的存储类,特别适合用于保存软件配置参数。(是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下) SharedPreferences可以保存的数据类型有:int、boolean
SharedPreferences类 供开发人员保存和获取基本数据类型的键值对。 该类主要用于基本类型,例如:booleans,ints,longs,strings。在应用程序结束后,数据仍旧会保存。 有两种方式可以获得SharedPreferences对象 1、getSharedPreferences(): 如果需要多个使用名称来区分的共享文件,则可以使用该方法,其第一个参数就是共享文件的名称。 对于使用同一个名称获得的多个SharedPreferences引用,其指向同
Android中使用SharedPreferences来进行简单数据的持久化处理,从名字就可以了解,其设计目的是为了保存应用程序的一些偏好设置,如音量,主题等信息。其与iOS开发中的NSUserDefault十分类似,并且,他们的实质都是采用XML格式的文件来存储数据。
SharedPreferences是谷歌提供的轻量级存储方案,使用起来比较方便,可以直接进行数据存储,不必另起线程。
前言: 程序中处理的大部分问题都与数据有关,读取数据显示在UI上,读取的数据可以是本地的,也可以是网络的。保存用户数据到存储空间,可以是本地的数据库,文件等,也可以是保存到网络服务器。总之大部分的程序都是在和数据打交道。Android中数据保存比较方便灵活,今天就按照官网说说数据保存。 大多数Android应用程序都需要存储数据,在Android生命周期方法onPause中,你可以保存用户在程序中的进度数据,在用户再次进入程序时进行读取恢复。可能一些应用程序不需要保存用户的进度信息,但是用户对于应用程序的设
这次制作App的引导页,主要用到2个知识“SharedPreferences 和 ViewPager”
SharedPreferences 也是通过一个简单的Demo来理解SharedPreferences我们该怎么用,说说自己站在一个iOS开发的角度来看这个SharedPreferences的理解
回顾SharedPreferences的用法,向SharedPreferences中存储数据的过程: 1.调用SharedPreferences的edit()方法获取SharedPreferences.Editor对象: 2.向SharedPreferences.Editor对象中添加数据 3.调用apple()方法将添加的数据提交,完成数据存储。
今天来和大家分享一篇有关Android中数据存储的文章,它可以说是Android对数据的所有存储方式中最简单的一种存储了,它就是SharedPreferences.
大大的世界,小小的人儿;喜欢夜的黑,更爱昼的白。因为热爱安全,所以想起该做些什么了?!公众号主要将不定期分享个人所见所闻所感,包括但不限于:安全测试、漏洞赏析、渗透技巧、企业安全...... 1 Android数据存储方式 本文简单介绍Android APP的五种数据存储方式(其中本地存储方式四种、网络存储方式一种,分别为:文件存储数据、SQLite数据库存储数据、使用ContentProvider存储数据、使用SharedPreferences存储数据、网络存储数据)与相关风险点,从安全的角度出发,对本地
SharedPreferences(简称sp)Android平台上一个轻量级的存储辅助类,它提供了key-value键值对的接口,用来保存应用的一些常用配置,在应用中通常做一些简单数据的持久化缓存。本文将详细的分析SharedPreferences的实现方式、存储机制、如何正确使用它以及sp的性能问题等方面。
共享参数SharedPreferences是Android最简单的数据存储方式,常用于存取“Key-Value”键值对数据。在使用共享参数之前,要先调用getSharedPreferences方法声明文件名与操作模式,示例代码如下:
最近到了一家公司,跟一个同事做项目,比如常规的一些操作用SharedPreferences就很好搞定,他跟我说SharedPreferences 会影响性能说了一堆… 难道别的存储方式就不耗费性能吗?不消耗内存吗?
轻量级的存储类,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下。
小编在地图项目,产品应用有各种数据,如:离线地图数据、离线语音数据、模板包、地图样式文件、收藏及历史数据等等。项目遇到应用数据相关的测试任务,小编对Android数据存储进一步学习和总结,2020我们一起努力吧!
不论是单线程还是多线程,MMKV的读写能力都远远的甩开了SharedPreferences&SQLite&SQLite+Transacion,但是MMKV到底是如何做到如此快的进行读写操作的?这就是下面会通过源码分析完成的事情了。
在这里也是偏向于使用android自带的SharedPreferences管理机制,简要说明使用流程,备忘:
在上一篇文章中我们学习了在Dart中的异步操作,你以为我没事啊还特地给你们专门写一篇文章啊,当然是有用的啊。
有时候我们做的App中不需要本地保存数据,但是有些小的配置参数需要记录,如果中Sqlite就感觉有点太重了,也比较麻烦,所以今天我们来看看Android系统中轻量数据存储SharedPreferences
http://blog.csdn.net/wulianghuan/article/details/8501063
应用通常包括允许用户修改应用特性和行为的设置。例如,有些应用允许用户指定是否启用通知,或指定应用与云端同步数据的频率。
在Android中,存储数据主要采用了3种方案,分别为文件存储, SharedPreferences存储以及数据库存储,当然,数据也可以保存在sd卡里,但相比上面这几种,可能就要麻烦点了,而且安全性也会降低。
Context类提供了一个openFileOutput()方法,将数据存到指定文件中。返回一个FileOutpueStream对象。 两个参数: 文件名,不包含路径,因为所有文件都默认存储到/data/data/<package name>/file/目录下; 文件的操作模式:MODE_PRIVATE(默认)和MPDE_APPEND。 MODE_PRIVATE:表示当指定相同文件名的时候,所写入的内容覆盖原文件。 MPDE_APPEND:追加。
Android数据存储实现的5大方式 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,更加系统详细的介绍了5种存储的方法和异同。 第一种: 使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Lon
我们的项目里常常会创建一些 Util 类,用于分类整理那些会在许多地方用到的小型函数 (也称实用函数),如果这类函数接收了另一个函数作为参数,则可能会造成一些额外的对象分配,通过使用 inline 关键字,您可以避免这种情况并提升应用性能。接下来我们就来看一看,当您把一个函数作为参数传递时发生了什么、inline 关键字背后做了哪些工作,以及使用内联函数 (inline function) 时的注意事项。
先启动主进程并获取SharedPreferences对象,然后对值进行修改,然后启动其他进程并获取SharedPreferences对象,能取得修改后的值,但此时如果再对此值进行修改,均不能对其他进程产生作用。
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/52098755
腾讯微信团队于2018年9月底宣布开源 MMKV ,这是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,主打高性能和稳定性。近期也已移植到 Android 平台,一并对外开源。
1.测试的相关概念 根据是否知道源代码分类: 黑盒测试: a - b - c 边值测试 白盒测试: 根据源代码写测试方法 或者 测试用例; 根据测试的粒度分类: 方法测试:写完一个方法后就测试 单元测试:测试一个能够独立运行的业务逻辑单元; 集成测试:整体测试项目 联调 系统测试:对整个系统进行测试 根据测试的暴力程度: 1、冒烟测试:高频次的点击软件 2、压力测试:使用测试工具:LoadRunner、Jmeter 2.单元测试 Junit 01_Junit单元测试 does not
共享参数(SharedPreferences)是Android上的一个轻量级存储工具,存储结构是类似map的key—value键值对形式。它主要用于保存app的基础设置,比如说app当前已安装的版本号,这样下次app版本更新时就能根据之前的版本号作相应处理。因为app每次更新都可能创建新的数据表,从版本7升级到版本10,对比版本9升级到版本10,前一种升级可能要创建更多的表,所以此时很有必要从SharedPreferences中读取之前的版本号,这样才能根据不同版本号做不同的分支处理。 另外,SharedPreferences还可用于保存Activity状态,当Activity暂停时,将此activity的状态保存到SharedPereferences中(主要是保存该activity必须的一些参数信息);当Activity重载时,系统回调方法onSaveInstanceState时,再从SharedPreferences中将值取出。
最近在处理一个历史遗留项目的时候饱受其害,主要表现为偶发性的 SharedPreferences 配置文件数据错乱,甚至丢失。经过排查发现是多进程的问题。项目中有两个不同进程,且会频繁的读写 SharedPreferences 文件,所以导致了数据错乱和丢失。趁此机会,精读了一遍 SharedPreferences 源码,下面就来说说 SharedPreferences 都有哪些槽点。
http://developer.android.com/training/basics/data-storage/index.html
领取专属 10元无门槛券
手把手带您无忧上云