目录
一、MMKV介绍
1.特点和优势:
2.使用指南:
3.依赖包:
二、MMKV的常用方法
1、初始化和获取实例:
2、存储数据:
3、读取数据
4、删除数据
5、其他操作:
三、MMKV的使用例子
MainActivity:
activity_main:
运行结果:
MMKV是一种用于安卓平台的轻量级键值存储库,它提供了一种高效、可靠的方式来在应用程序中存储和读取数据。
dependencies {
implementation 'com.tencent:mmkv:1.2.10'
}
String rootDir = MMKV.initialize(context); // 初始化默认根目录
MMKV mmkv = MMKV.defaultMMKV(); // 获取默认的MMKV实例
mmkv.encode("key", value); // 存储数据,自动根据类型选择合适的方法
// 或者使用特定类型的存储方法
mmkv.putInt("intKey", intValue);
mmkv.putLong("longKey", longValue);
mmkv.putFloat("floatKey", floatValue);
mmkv.putBoolean("booleanKey", booleanValue);
mmkv.putString("stringKey", stringValue);
mmkv.putStringSet("setKey", stringSet);
Object value = mmkv.decode("key"); // 读取数据,自动根据类型选择合适的方法
// 或者使用特定类型的读取方法
int intValue = mmkv.getInt("intKey", defaultValue);
long longValue = mmkv.getLong("longKey", defaultValue);
float floatValue = mmkv.getFloat("floatKey", defaultValue);
boolean booleanValue = mmkv.getBoolean("booleanKey", defaultValue);
String stringValue = mmkv.getString("stringKey", defaultValue);
Set stringSet = mmkv.getStringSet("setKey", defaultSet);
mmkv.remove("key"); // 删除指定键值对
mmkv.removeValueForKey("key"); // 同上,作用相同
mmkv.removeValuesForKeys(new String[]{"key1", "key2"}); // 删除多个键值对
mmkv.clearAll(); // 清空所有数据
boolean contains = mmkv.containsKey("key"); // 判断是否包含指定的键
int count = mmkv.count(); // 获取存储的数据总数
String[] allKeys = mmkv.allKeys(); // 获取所有存储的键
package com.example.mmkvdemo;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;
import com.tencent.mmkv.MMKV;
public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
EditText password, account;
Button login, register;
CheckBox mCheckBox;
String Password, Account;
MMKV mmkv;
String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
// 初始化MMKV
String rootDir = MMKV.initialize(this);
Log.d(TAG, "路径:" + rootDir);
// 读取保存的账号和密码
mmkv = MMKV.defaultMMKV();
if (mmkv.contains("account") && mmkv.contains("password")) {
Account = mmkv.decodeString("account", "");
Password = mmkv.decodeString("password", "");
account.setText(Account);
password.setText(Password);
}
}
private void initView() {
mCheckBox = findViewById(R.id.Login_Remember);
login = findViewById(R.id.login_btn_login);
register = findViewById(R.id.login_btn_register);
password = findViewById(R.id.login_edit_pwd);
account = findViewById(R.id.login_edit_account);
mCheckBox.setOnCheckedChangeListener(this);
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "点击了注册", Toast.LENGTH_LONG).show();
}
});
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "点击了登录", Toast.LENGTH_LONG).show();
}
});
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if (!TextUtils.isEmpty(password.getText().toString()) && !TextUtils.isEmpty(account.getText().toString())) {
// 存储数据
Account = account.getText().toString();
Password = password.getText().toString();
mmkv.putString("account", Account); // 存储数据
mmkv.putString("password", Password);
}
} else {
// 清除保存的账号和密码
mmkv.removeValuesForKeys(new String[]{"account", "password"});
}
}
}
MMKV相对于SharedPreferences(sp)有以下几个优势:
1. 性能更好:MMKV使用了自定义的键值存储引擎,底层采用了mmap映射文件的方式,避免了内存拷贝和序列化/反序列化的开销。相比之下,SharedPreferences是基于XML文件的存储,每次读写都需要进行IO操作,性能较低。
2. 存储容量更大:MMKV支持将数据存储在独立的文件中,并且可以设置单个文件的最大大小,而SharedPreferences则是将数据存储在一个XML文件中,当存储的数据量较大时,性能会下降。
3. 多进程并发安全:MMKV通过文件锁机制来实现多进程并发安全访问,避免了数据错乱和冲突的问题。而SharedPreferences没有提供多进程并发安全的保证,当多个进程同时对同一个SharedPreferences文件进行操作时,可能会导致数据异常。
4. 支持自定义加密:MMKV支持自定义的加密器,可以对存储的数据进行加密保护,增加数据的安全性。而SharedPreferences不直接支持加密,需要开发者手动对存储的数据进行加密处理。
5. API更简洁易用:MMKV提供了简洁易用的API,使用起来更加方便快捷,可以直接存储各种类型的数据,无需手动进行类型转换。而SharedPreferences需要手动进行类型转换和键值的拼接。
总的来说,MMKV相对于SharedPreferences在性能、存储容量、多进程并发安全性和加密等方面有着明显的优势,特别适合用于高性能要求、大数据量存储或多进程场景下的数据存储需求。