(是用xml文件存放数据,文件存放在/data/data//shared_prefs目录下) SharedPreferences可以保存的数据类型有:int、boolean...(只能被自己的应用程序访问) MODE_WORLD_READABLE(除了自己访问外还可以被其它应该程序读取) MODE_WORLD_WRITEABLE(除了自己访问外还可以被其它应该程序读取和写入...(String key, Set values) 参数 key:指定数据对应的key value:指定的值 移除指定key的数据(由Editor对象调用) abstract SharedPreferences.Editor...数据将一直存在,除非被覆盖、移除、清空或文件被删除。...(SharedPreferences保存的数据会随着应用的卸载而被删除) tip 3 同时执行这两句代码的时候,第一行代码所写的内容会被第二行代码取代。
一 SharedPreferences基本介绍 SharedPreferences是Android平台上一种轻量级的数据存储方式,用于保存和读取应用程序的配置信息或其他简单的持久化数据。...应用内部存储:SharedPreferences使用XML文件来存储数据,数据保存在应用程序的私有目录中,只能被当前应用程序访问。...持久化存储:SharedPreferences中的数据会在应用关闭后仍然保留,并且可以在下次启动应用时重新读取使用。...文件只能被当前应用程序访问,其他应用无法读取。...contains(String key): 判断指定键是否存在于SharedPreferences中。 remove(String key): 移除指定键及其对应的值。
SharedPreferences(简称sp)Android平台上一个轻量级的存储辅助类,它提供了key-value键值对的接口,用来保存应用的一些常用配置,在应用中通常做一些简单数据的持久化缓存。...mode参数用于指定操作模式,它的可选值有2种,MODE_PRIVATE(默认值,指定文件是私有的,只可被当前应用访问或者相同user ID的进程)和MODE_MULTI_PROCESS(多进程共享模式...判断其他线程是否也正在进行写入操作,如果是,则把mMap的键值对复制出一份。 将mMap赋值给mapToWriteToDisk变量,后面直接在mapToWriteToDisk上进行操作。...isFromSyncCommit); } 逻辑解析: 首先判断是否需要同步,这里可以看到apply是异步的,commit是同步的(有条件的同步)。...这里commit同步提交也是有条件的,如果commit时,该sp文件正在被其他线程执行数据写入,则执行异步写入。
前言 前两篇《Android内存篇(一)---使用JVMTI监控应用》《Android内存篇(二)---JVMTI在Anroid8.1下的使用》主要说的是内存监控,本章做为内存的第三篇,主要介绍的是有效解决问题的方法...执行内存兜底策略的条件? A 执行内存兜底策略,一般来说要满足下面六个条件: 1)是否在主界面退到后台且位于后台时间超过30分钟。 2)当前时间为早上2点到5点前。...同时执行关闭当前进程的方法,关闭当前进程两个方法: android.os.Process.killProcess(android.os.Process.myPid()) System.exit(0) 当有多个...代码实现 新建了一个AppRestart的项目,上图是完成后的整个目录 01创建Activity栈堆 新建一个ActivityStack的类,里面加入activity的集合,和创建,移除,清空等方法。...} } 02创建BaseActivity的类 新建BaseActivity的类,以后创建的Activity都继承自BaseActivity,在创建和释放时自动在活动的Activity列表中加入和移除
()方法 二 两种方式的区别: 调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他 组件共享...Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件....Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件....MODE_WORLD_READABLE:表示当前文件可以被其他应用读取. MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入....但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型, 比如其无法进行条件查询等。
); SharedPreferences 是通过 getSharedPreferences() 初始化创建一个对象;其中 MODE 为文件操作类型;MODE_PRIVATE 为本应用私有的,其他 app...不可访问的;MODE_APPEND 也为应用私有,但是新保存的数据放置在文件最后,不会替换之前已有的 key-value;MODE_WORLD_READABLE/WRITEABLE 为其他文件是否可以支持读写操作...MMKV 基本介绍 正因为 SharedPreferences 还有很大的优化空间,因为我们才会尝试其他存储框架;其中 腾讯 MMKV 得到很多人的支持; MMKV 分别代表的是 Memory...应用便捷性,较好的兼容性; MMKV 使用方式便捷,与 SharedPreferences 基本一致,迁移成本低; ?...protobuf 在更新文件时,虽然也不方便局部更新,但是可以做增量更新,即不管之前是否有相同的 key,一旦有新的数据便添加到文件最后,待最终文件读取时,后面新的数据会覆盖之前老旧的数据;
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。...MODE_WORLD_READABLE:表示当前文件可以被其他应用读取; MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。...); android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。...默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data//files),其他程序无法访问。...update() 根据条件,更新指定列的值,所以用 execSQL() 方法可以达到同样的目的。 WHERE 条件和其参数和用过的其他 SQL APIs 类似。
其他 app 不可访问的;MODE_APPEND 也为应用私有,但是新保存的数据放置在文件最后,不会替换之前已有的 key-value;MODE_WORLD_READABLE/WRITEABLE 为其他文件是否可以支持读写操作...SharedPreferences 问题与优化 SharedPreferences 虽因其便利性而应用广泛,但也存在一些弊端; Q1: 编辑 get()/put() 时均会涉及到互斥锁和写入锁...MMKV 基本介绍 正因为 SharedPreferences 还有很大的优化空间,因为我们才会尝试其他存储框架;其中 腾讯 MMKV 得到很多人的支持; MMKV 分别代表的是...应用便捷性,较好的兼容性; MMKV 使用方式便捷,与 SharedPreferences 基本一致,迁移成本低; [5xu8khs517.png?...q-signature=19a12940203b0320e7c068e1fa14bf3fd746f358] protobuf 在更新文件时,虽然也不方便局部更新,但是可以做增量更新,即不管之前是否有相同的
如果表中有外键约束,并且这些外键被其他表引用,则可能无法直接 TRUNCATE 该表。 TRUNCATE TABLE 会重置表的自增计数器(AUTO_INCREMENT)。...可以通过WHERE子句指定删除条件,如果没有条件则删除所有行。此外,DELETE操作会触发相关的触发器和外键约束。...触发器和外键约束 TRUNCATE TABLE:TRUNCATE操作不会触发与表相关的触发器,也不会检查外键约束。因此,如果表被其他表的外键所引用,则可能无法直接TRUNCATE该表。...DELETE FROM:DELETE操作会触发与表相关的触发器,并且会检查外键约束。如果尝试删除的行被其他表的外键所引用,则DELETE操作会失败并返回错误。...依赖关系:检查要重命名的表是否被其他表的查询、视图、存储过程、触发器等引用,或者是否作为外键的参照表。如果有,你需要先处理这些依赖关系,否则可能会导致数据库完整性问题或查询错误。
总揽 Android文件系统从大的方面分为以下几类: 1、内部存储 2、外部存储 3、SharedPreferences 4、数据库 PS:SharedPreferences和数据库我们在另外的篇幅中详细介绍...1、App 私有目录 App 的私有目录指其他应用可以访问当前应用该目录下的数据,应用卸载后也会随之删除。 公共目录:外部可以自由访问,应用删除后这部分存储的数据不会删除。...其他场景(如文件管理器应用、备份和恢复应用以及文档管理应用)可能也需要考虑类似情况。...除 /Android/data/、/sdcard/Android 和 /sdcard/Android 的大多数子目录外,对所有内部存储目录的写入权限。...获得此权限的应用仍然无法访问属于其他应用的内部存储空间,因为这些目录在存储卷上显示为 Android/data/ 的子目录。
收缩数据库:释放不使用的空间 方式:①手动收缩 收缩数据库:不能低于初始大小 收缩文件:可以低于初始大小,最小单位1M ②自动收缩 数据库属性,可设置自动收缩 4、分离和附加数据库 分离:将数据库从实例中移除...,便于移动或复制数据库 附加:将数据库添加到实例中 删除:将数据库从实例中移除并删除数据文件,只可删除用户数据库 5、数据类型: 精准数字: int :整型 bit :只有0或1或NULL三个值,可输入的值只有...Unicode字符,双字节 二进制字符:binary 日期和时间:date 日期 time 时间 datetime 日期和时间 6、创建表: ①列名 ②数据类型 ③是否允许...7、插入数据: insert into 表名 values(‘值1’,‘值2’,‘’,……) 8、更新数据: update 表名 set 列名=‘新值’ where 条件...9、删除数据: ①delete :可以有条件删除部分数据,保存日志,可以恢复,标识列不重置,可删除有外键 约束的数据表 ②truncate :只能清空整个表,不保存日志,不可恢复,标识列重置为0,不可删除有外键约束的表
在Android项目应用中,经常会用到读取和保存配置文件。Android提供了SharedPreference类方便的对配置文件进行操作。...); userId = sp.getInt(SettingsUtil.USERID, -1); } 这样的代码,有没有让人觉得一段乱糟糟的,不但一处是,只要用到配置的地方,写法太任性,太随意了有木有...因此,有必要对配置文件的操作理一理,归归类,管理起来,方便复用,可做为一个模块来用。 在应用启动时,加载读取配置文件。在需要保存时,直接赋值并调用saveCfg()即可。...); } } /** * 移除某个key值已经对应的值 */ public void remove(String key) {...public void clear() { editor.clear(); editor.commit(); } /** * 查询某个key是否存在
以下是对5种数据本存储方式的介绍: 1.1 文件存储数据 文件存储方式主要是使用IO流操作读写sdcard上的文件,比如应用程序数据文件夹下的某一文件被其他应用读取、写入等操作,其核心原理为: Context...一个程序可以通过实现一个Content Provider的抽象接口将数据暴露出去,其他的应用程序可以通过统一的接口保存、读取、修改、添加、删除此Content Provider的各种数据(涉及到一定权限...1.4 使用SharedPreferences存储数据 该存储方式通常用来存储应用的配置信息,保存方式基于XML文件存储的key-value键值对数据,一般作为数据存储的一种补充。...4.6 检查SharedPreferences是否泄漏敏感信息 使用十六进制工具,比如UE、Notepad++等打开下载到本地的配置文件,并搜索是否包含敏感信息。 ?...4.7 检查其他本地文件夹及文件是否泄漏敏感信息 除了重点对SQLite数据库文件和SharedPreferences配置文件进行安全检查外,其他的文件夹均可进行敏感文件、关键字的搜索。 ?
每一个SharedPreferences文件都被Android framework管理,可以是只能创建它的应用程序访问,也可以分享给其他应用程序。怎么用SharedPreferences保存数据呢?...注意:当你给SharedPreferences起名字的时候最好是复杂点的,这样就能保证不会有名字重复却属于不同应用程序的SharedPreferences,最好是以你的应用包名再加上其他构成,比如"com.example.myapp.PREFERENCE_FILE_KEY...注意:当你创建SharedPreferences时mode值的是MODE_WORLD_PRIVATE或者MODE_WORLD_WRITEABLE,你创建的Shared Preferences文件是可以被其他应用程序访问的...这两种mode都是比较危险的,因为其他应用程序也能访问,所以会造成数据外泄。...注意:commit()和apply()都是提交对数据的操作,但是它们还是有些区别的: 1、commit方法有返回值,返回值是一个boolean变量,表示你的保存动作是否成功,apply是没有返回值的,所以如果你不需要返回值
Sharedpreferences保存数据类似配置信息格式的数据,使用简单类型的key-value对 主要方法有: Boolean contains(String key):判断是否包含特定的key的数据...(String name,int mode)获取 其中mode有三种格式(本应用程序可读可写,其他应用程序可读不可写,其他应用程序可读可写) 注意设置的数据会保存在/data/data/包名/shared_prefs...edtior.commit(); 读取其他应用中的SharePreferences 步骤: 1) 创建其他程序对应的context 2) 调用其他应用程序中的context获取对应SharedPreferences...对象 3) 如果需要修改其他应用的SharedPreferences数据,那需要调用edit方法写入即可 注意:这里需要在其他应用中设置SharedPreferences的时候需设置成可MODE_WORLD_READABLE...(其他应用可读方式)或者MODE_WORLD_WRITEABLE(其他应用可以可读可写方式) 我们需要在程序中保存少量数据放便在以后使用可以使用SharedPreferences来操作
允许投稿的专题 允许投稿的分类 投稿可选择或创建标签 限制敏感词 投稿字数限制 允许访问后台的角色 邮件通知 允许上传的文件类型 自动更新普通等级 VIP 到期提醒 字符长度限制 菜单显示、隐藏与排序 单页面应用...(路由) 等级标识 用户可设置接收通知的方式 优化功能 禁用 PingBack 移除头部冗余代码 禁用 RSS 订阅 禁用 WordPress 区分大小写转换 禁用字符转码 禁用文章修订和自动保存 移除仪表盘小工具...禁用古腾堡小工具 禁用文章 Embed 格式化日期 格式化数字 在新窗口中打开链接 自动添加图像 alt 和 title 搜索重定向 仅搜索文章标题 简化分类链接 HTML 代码压缩输出 禁用复制内容 重置北京时间...移除菜单中多余的标签 全站添加 canonical 标签 外链自动添加 nofollow 标签 专题中可选择除专题外的其它文章类型 专题下的文章列表可按类型进行筛选 所有简码 四种消息框简码(信息、成功...通过浏览器访问入口页面: Bt-Panel: http://IP:8888 username: fft6c0rf password: d2616f03 若无法访问,请检查安全组端口80,8888是否打开
问题2:各种缓存方案,进程不安全是否会导致数据丢失,如何处理数据丢失情况?如何处理脏数据,其原理大概是什么?问题3:各种缓存方案使用场景是什么?有什么缺陷,为了解决缺陷做了些什么?...Map,LruCache等等磁盘缓存:后台应用有可能会被杀死,那么相应的内存缓存对象也会被销毁。当你的应用重新回到前台显示时,你需要用到缓存数据时,这个时候可以用磁盘缓存。...DataStore:旨在替代原有的 SharedPreferences,支持SharedPreferences数据的迁移Room/Realm/GreenDao:支持大型或复杂数据集图片其他开源缓存库ACache...3.8 使用缓存注意点在使用内存缓存的时候须要注意防止内存泄露,使用磁盘缓存的时候注意确保缓存的时效性针对SharedPreferences使用建议有:因为 SharedPreferences 虽然是全量更新的模式...使用华为手机测试测试数据案例1图片图片在主线程中测试数据,同步耗时时间(主线程还有其他的耗时)跟异步场景有较大差别。
函数调用——工作原理 我们在应用中常常要用到 SharedPreferences,现在假设您为了减少每次向 SharedPreferences 中写入内容时产生的模板代码,实现了以下实用函数: fun...所以虽然我们没有调用任何其他对象的构造函数,却还是创建出了一个新的对象: NEW com/example/inlinefun/PreferencesManager$saveToken$1 复制代码 为了便于理解...内联函数——工作原理 为了提升我们应用的性能,我们可以通过使用 inline 关键字,来减少函数对象的创建: inline fun SharedPreferences.edit( commit:...⚠️ 如果您试图标记为内联函数的函数,并没有接收另一个函数作为参数,您将无法获得明显的性能提升,而且 IDE 甚至会建议您移除 inline 标记: image.png ⚠️ 因为 inline...: 第一种情况: 如果您的函数有多个函数参数,但是您需要持有其中某个的引用时,您可以将对应的参数标记为 noinline。
SharedPreferences Android 五种数据存储的方式分别为: 名字 介绍 SharedPreferences 以Map形式存放简单的配置参数; ContentProvider 将应用的私有数据提供给其他应用使用...获取SharedPreferences对象有下面两个方式: getSharedPreferences(String name, int mode) 通过Context调用该方法获得对象。...数据能被其他应用程序读,但不能写; Context.MODE_WORLD_WRITEABLE: 指定该SharedPreferences数据能被其他应用程序读; Context.MODE_APPEND...:该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件; getPreferences(int mode) 通过Activity调用获得对象。...commit有返回值,返回是否成功写入永久性存储种。apply没有返回值。 性能问题 跨进程不安全。
概述 SharedPreferences(简称SP)是Android中常用的数据存储方式,SP采用key-value(键值对)形式,主要用于轻量级的数据存储,尤其适合保存应用的配置参数,但不建议使用SP...提交数据:同步方式,有返回值表示数据保存是否成功boolean result = editor.commit(); // 提交数据:异步方式,没有返回值// editor.apply() // 读取数据...插入数据,暂存到mModified mModified.put(key, value); return this; } } // 移除数据...优化: commit和apply的方法区别在于同步写入和异步写入,以及是否需要返回值。 在不需要返回值的情况下,使用apply方法可以极大的提高性能。...SP的get操作,会锁定SharedPreferences对象,互斥其他操作。 2.
领取专属 10元无门槛券
手把手带您无忧上云