永发信息网

android中getSharedPreferences方法实现原理

答案:2  悬赏:50  手机版
解决时间 2021-03-26 05:13
android中getSharedPreferences方法实现原理
最佳答案
Context的真正实现在ContextImpl这个类里,常用的Context其实都是这个类的实例,这个类访问属性是package,所以在Eclipse看不到这个类,要去android源码目录下找


贴出getSharedPreferences方法的实现源码

private static ArrayMap> sSharedPrefs;    @Override
    public SharedPreferences getSharedPreferences(String name, int mode) {
        SharedPreferencesImpl sp;
        synchronized (ContextImpl.class) {
            if (sSharedPrefs == null) {
                sSharedPrefs = new ArrayMap>();
            }

            final String packageName = getPackageName();
            ArrayMap packagePrefs = sSharedPrefs.get(packageName);
            if (packagePrefs == null) {
                packagePrefs = new ArrayMap();
                sSharedPrefs.put(packageName, packagePrefs);
            }

            // At least one application in the world actually passes in a null
            // name.  This happened to work because when we generated the file name
            // we would stringify it to "null.xml".  Nice.
            if (mPackageInfo.getApplicationInfo().targetSdkVersion <
                    Build.VERSION_CODES.KITKAT) {
                if (name == null) {
                    name = "null";
                }
            }

            sp = packagePrefs.get(name);
            if (sp == null) {
                File prefsFile = getSharedPrefsFile(name);
                sp = new SharedPreferencesImpl(prefsFile, mode);
                packagePrefs.put(name, sp);
                return sp;
            }
        }
        if ((mode & Context.MODE_MULTI_PROCESS) != 0 ||
            getApplicationInfo().targetSdkVersion < android.os.Build.VERSION_CODES.HONEYCOMB) {
            // If somebody else (some other process) changed the prefs
            // file behind our back, we reload it.  This has been the
            // historical (if undocumented) behavior.
            sp.startReloadIfChangedUnexpectedly();
        }
        return sp;
    }实际上返回的也是SharedPreferences的实现类SharedPreferencesImpl实例,SharedPreferences内部的存储实现我就不废话了,找到SharedPreferencesImpl这个类读一下就明白了,这段不复杂
全部回答
ContextWrapper 看下这个。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
现在高铁票可以改签普通火车票吗?
业务时间可以学什么
tp5 自定义验证规则怎么用
第二步是如何得到的
结婚封利是要写名字的话应该写在利是封的哪个
袖珍男人能满足正常女人吗
AT4速手自一体和4速自动变速箱哪个好
求教98英雄选哪几个
上海徐汇区柳州路漕宝路是内环吗
(一3.59)X(一22分之7)一2.41X(一22分之7)十6X
谁有一张经理都围着一个人在干活
2016年缅甸最近气象灾害
现有①NaOH ②Al2(SO4)3 ③Ba(NO3)2 ④
朱砂的主要成份有什么?
以下说法完全正确的是:(单选) 选择一个答
推荐资讯
奔腾G3258超频到4.4和i7 4790k关闭超线程屏蔽
单选题在α粒子散射实验中,使少数α粒子产生
宁波东到广东汕头今日高铁票价发车时间
帮小宝宝取个名爸爸姓路妈妈姓胡孩子是21号中
求一组高清图片,一共九张。今晚能睡八小时
关于炒菜的十个字开头十个字结尾。
东北大豆筋是什么来的
1景是什么单位
有事k我是什么意思
胰腺炎回复后能吃干果…花生、榛子干果类吗?
非谓语第38题,求解释
2010年深圳户口随迁条件
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?