Android面试题-SharedPreferences源码分析
2017-05-25 18:14
323 查看
SharedPreferences sp = context.getSharedPreferences(spName, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.putString(key, (String) object); editor.commit();
源码分析
@Override public SharedPreferences getSharedPreferences(String name, int mode) { SharedPreferencesImpl sp; synchronized (ContextImpl.class) { if (sSharedPrefs == null) { sSharedPrefs = new ArrayMap<String, ArrayMap<String, SharedPreferencesImpl>>(); } final String packageName = getPackageName(); ArrayMap<String, SharedPreferencesImpl> packagePrefs = sSharedPrefs.get(packageName); if (packagePrefs == null) { packagePrefs = new ArrayMap<String, SharedPreferencesImpl>(); 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; }
源码可知
1) sSharedPrefs是一个静态的ArrayMap,表示一个包可以对应有一组SharedPreferences,并且直接映射文件名到SharedpreferencesImplsSharedPrefs = new ArrayMap<String, ArrayMap<String, SharedPreferencesImpl>>();
相关文章推荐
- Android面试题-IntentService源码分析
- Android面试题-OkHttp3源码分析
- 一道面试题引发的对android中context的研究(三)-各种Context在ActivityThread中实例化过程源码分析
- Android面试题-Volley源码分析
- Android面试题-LayoutInflater源码分析
- Android framework源码之JNI实现过程分析
- Android 2.1 源码结构分析 转载
- Android 2.1 源码结构分析
- Android 源码分析-打电话和发短信
- Android IPC 通讯机制源码分析 (二)
- Android IPC 通讯机制源码分析2(转)
- Android IPC 通讯机制源码分析 (二)
- Android IPC 通讯机制源码分析
- Android 2.1 源码结构分析
- Android App 源码分析(贪吃蛇游戏)
- Android IPC 通讯机制源码分析
- Android IPC 通讯机制源码分析
- Android IPC 通讯机制源码分析(1)
- Android IPC 通讯机制源码分析 二
- Android 2.1 源码结构分析 转载