Android 退出应用清除SharedPreferences,应该在哪个方法里去执行这个清除动作
SharedPreferences是持久化用的,退出应用就清除,那你为什么要存SharedPreferences里?只存内存里不就行了吗
Sharedpreferences是Android平台上一个轻量级的存储类,可以用于保存应用程序的各种配置信息,如应用设置里面的各种开关、是否打开音效、是否使用震动效果、小游戏的玩家积分等,其本质是以“键-值”对的方式保存数据到本地的 xml 文件中,其文件保存在 /data/data//shared_prefs 目录下。
核心原理:以“键-值”对的方式保存数据到本地的 xml 文件中,具体实现是在 SharedPreferencesImpl 里面使用Map来管理,xml 文件的具体保存路径是在 /data/data//shared_prefs 目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口Editor对象实现。
SharedPreferences本身是一 个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例,该方法中name表示要操作的xml文件名,第二个参数具体如下:
Context.MODE_APPEND: 追加方式存储
Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写。
Context.MODE_WORLD_READABLE: 指定该SharedPreferences数据能被其他应用程序读,但不能写。
Context.MODE_WORLD_WRITEABLE: 指定该SharedPreferences数据能被其他应用程序读,写
Context.MODE_MULTI_PROCESS: 适用于多进程访问(目前已被废弃,google官方推荐使用ContentProvider来实现进程间共享访问)
Editor有如下主要重要方法:
SharedPreferences.Editor clear():清空SharedPreferences里所有数据
SharedPreferences.Editor putXxx(String key , xxx value): 向SharedPreferences存入指定key对应的数据,其中xxx 可以是boolean,float,int等各种基本类型据
SharedPreferences.Editor remove(): 删除SharedPreferences中指定key对应的数据项
boolean commit(): 当Editor编辑完成后,使用该方法提交修改
首次创建SharedPreferences对象(即SharedPreferences初始化时),会根据文件名将文件下内容一次性加载到mMap容器中,每当我们edit都会创建一个新的EditorImpl对象,当修改或者添加数据时会将数据添加到mModifiled容器中,然后commit或者apply操作比较mMap与mModifiled数据修正mMap中最后一次提交数据然后写入到文件中。
使用SharedPreferences的 get 方法获取数据时是直接从 mMap 中读取的,直接从 mMap 中读取数据可以提高读取的效率,但也间接表明 SharedPreferences 不适合存放 大的key和value,因为存放大的key和value在SharedPreferences中,数据会一直存储在内存中得不到释放占用较大的内存,容易引发系统 GC,严重时导致界面丢帧甚至ANR。