这个性能非常厉害。
![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
依赖
1 2 3
|
implementation 'com.tencent:mmkv-static:+'
|
初始化
在MainActivity
旁加一个AppContext
意思为整个app的一些配置,只会在app启动时候运行一次。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import android.app.Application;
import com.tencent.mmkv.MMKV;
public class AppContext extends Application { @Override public void onCreate() { super.onCreate(); initMMKV(); }
private void initMMKV() { String rootDir = MMKV.initialize(this);
} }
|
然后还要去配置文件中设置 App 的 name
![image-20230530101638129](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
封装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager;
import com.tencent.mmkv.MMKV;
public class PreferenceUtil {
private static PreferenceUtil instance; private final Context context; private final MMKV preference;
private static final String SHOW_GUIDE = "SHOW_GUIDE";
public PreferenceUtil(Context context) { this.context = context.getApplicationContext(); preference = MMKV.defaultMMKV(); }
public synchronized static PreferenceUtil getInstance(Context context) { if (instance == null) { instance = new PreferenceUtil(context); } return instance; }
public boolean isShowGuide() { return getBoolean(SHOW_GUIDE, true); }
public void setShowGuide(boolean value) { putBoolean(SHOW_GUIDE, value); }
private void putBoolean(String key, boolean value) { preference.edit().putBoolean(key, value).apply(); }
private boolean getBoolean(String key, boolean defaultValue) { return preference.getBoolean(key, defaultValue); }
}
|
使用
1 2 3 4 5 6 7
| private void prepareNext() { if (PreferenceUtil.getInstance(getHostActivity()).isShowGuide()){ startActivityAfterFinishThis(GuideActivity.class); return; } postNext(); }
|
然后记得在有些地方去设置这个偏好设置为false。
就可以正常工作了。
优化
每次写PreferenceUtil.getInstance(getHostActivity())
太重复了。
我们去BaseLogicActivity
(这个项目APP通用逻辑)里面。
1 2 3 4 5 6 7
| protected PreferenceUtil sp;
@Override protected void initDatum() { super.initDatum(); sp = PreferenceUtil.getInstance(getHostActivity()); }
|
然后要用偏好设置的Activity 继承这个BaseLogicActivity 然后就可以改成成这样:
1 2 3 4 5 6 7
| private void prepareNext() { if (sp.isShowGuide()){ startActivityAfterFinishThis(GuideActivity.class); return; } postNext(); }
|
成果展示
理论逻辑是:
第一来
splash界面然后用户协议,然后动态授权后去guide界面
第二次进入就是 splash 直接去main界面
![](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
所以我们以后就用腾讯的这个MMKV
来代替原生的Preference