Android 数据持久化保存方式之一 SharedPreferences

前言

SharedPreferences 是安卓永久保存数据的方式之一,数据不会随着 Activity 的销毁、程序的退出而丢失。SharedPreferences 储存数据的方式为 key - value 形式,可以保存简单的数据。

例子

如下是一个封装好的储存 int 类型数据的类。

package com.example.sharedpreference;

import android.content.Context;
import android.content.SharedPreferences;

public class MyData {
    private Context context;

    public MyData(Context context){
        this.context = context;
    }
    public void save(String key, int value){
        SharedPreferences shp = context.getSharedPreferences(
                context.getString(R.string.shared_file_name), Context.MODE_PRIVATE);//此处的文件名为"MyData"
        SharedPreferences.Editor editor = shp.edit();
        editor.putInt(key, value);
        editor.apply();//不要忘记提交
    }
    public int load(String key){
        SharedPreferences shp = context.getSharedPreferences("MyData", Context.MODE_PRIVATE);      
        return shp.getInt(key, 0);//key, defaultValue;
    }
}

提交有两种方式:commit()apply()
两者区别在于 apply() 是以非同步的方式提交,可以避免阻塞主线程。

getSharedPreferences() 创建的是全局共享的资源(getPreferences() 已弃用)。可能涉及到多个地方对文件操作,所以推荐使用 apply() 提交。

需要注意的是:Activity 中使用 MyData 类的时候并不能向构造器中直接传入this,Activity 是频繁创建销毁的,若传入 this 作 context,当 Activity 被销毁时,由于 MyData 对象对 Activity 的引用,被销毁的 Activity 对象并不会被 GC 系统回收,从而造成内存泄漏。

传入的参数一般使用 getApplicationContext(),这个 Context 对象的生命周期伴随着整个 app 的运行。

如下是 MainActivity 中使用 MyData 储存数据的例子:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MyData myData = new MyData(getApplicationContext());
        myData.save("Key1", 100);
        myData.save("Key2", 200);
    }
}

可在Device File Explorer 中找到存储数据的 MyData.xml 文件。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值