`

Preference(首选项)保存配置文件的调查

阅读更多
获得首选项的默认为
IPreferenceStore store = new AbstractUIPlugin().getPreferenceStore();

进入这个方法
public IPreferenceStore getPreferenceStore()
/*     */   {
/* 283 */     if (this.preferenceStore == null) {
/* 284 */       this.preferenceStore = new ScopedPreferenceStore(new InstanceScope(), getBundle().getSymbolicName());
/*     */     }
/*     */ 
/* 287 */     return this.preferenceStore;
/*     */   }

而ScopedPreferenceStore类又继承与AbstractScope类
看里面的方法getNode()
public IEclipsePreferences getNode(String qualifier)
/*    */   {
/* 36 */     if (qualifier == null)
/* 37 */       throw new IllegalArgumentException();
/* 38 */     return ((IEclipsePreferences)PreferencesService.getDefault().getRootNode().node(getName()).node(qualifier));
/*    */   }

然后看PreferencesService.getDefault()返回的PreferencesService。
 public static PreferencesService getDefault()
/*      */   {
/*   70 */     if (instance == null)
/*   71 */       instance = new PreferencesService();
/*   72 */     return instance;
/*      */   }

追踪到PreferencesService类里的构造函数
PreferencesService()
/*      */   {
/*   81 */     initializeDefaultScopes();
/*      */   }

继续追踪
private void initializeDefaultScopes() {
/*  371 */     this.defaultScopes.put("default", new DefaultPreferences());
/*  372 */     root.addChild("default", null);
/*  373 */     this.defaultScopes.put("instance", new InstancePreferences());
/*  374 */     root.addChild("instance", null);
/*  375 */     this.defaultScopes.put("configuration", new ConfigurationPreferences());
/*  376 */     root.addChild("configuration", null);
/*      */   }

有三个scope。
继续追踪到里面
可以看到

private static IPath getBaseLocation()
/*     */   {
/*  41 */     if (baseLocation == null) {
/*  42 */       Location instanceLocation = PreferencesOSGiUtils.getDefault().getInstanceLocation();
/*  43 */       if ((instanceLocation != null) && (((instanceLocation.isSet()) || (instanceLocation.allowsDefault()))))
/*  44 */         baseLocation = MetaDataKeeper.getMetaArea().getStateLocation("org.eclipse.core.runtime");
/*     */     }
/*  46 */     return baseLocation;
/*     */   }

baseLocation即为存放配置文件的根目录
我的电脑上为
D:\Interstage&IIM\eclipse_3.4.1\runtime-EclipseApplication\.metadata\.plugins\org.eclipse.core.runtime
(你会发现有个以工程名为前缀,.pref为后缀的文件生成。只有关了)
当我们调用getString等方法时,会调用getNode方法。。。
IEclipsePreferences这个类,保存了配置文件的信息。
最后
public String get(String key, String defaultValue, Preferences[] nodes)
/*      */   {
/*  457 */     if (nodes == null)
/*  458 */       return defaultValue;
/*  459 */     for (int i = 0; i < nodes.length; ++i) {
/*  460 */       Preferences node = nodes[i];
/*  461 */       if (node != null) {
/*  462 */         String result = node.get(key, null);
/*  463 */         if (result != null)
/*  464 */           return result;
/*      */       }
/*      */     }
/*  467 */     return defaultValue;

利用Preferences中保存的信息,根据key获取value

后记、
preference 机制由 org.eclipse.core.runtime 插件提供,可保持的值类型包括:boolean, byte[], long, int, String, float, double。这些值保存在如下图所示的结构中:


Eclipse 运行时环境定义了三种基本的 scope:
(1)Instance scoped:单个 workspace 或者 eclipse 实例范围
(2)Configuration scoped:eclipse configuration 范围内的多个实例共享 preference
(3)Default scoped:描述 preference 的默认值,由 plugin 和 product 初始文件进行定义,而不能被 eclipse 运行时修改和存储。

注意:只有eclipse退出后,才会自动保存。、、、

不正常的退出不会保存、、断电或者任务管理器中的强制退出、、、

之前一直以为会在PreferenceStore初始化的时候加载配置文件,其实是在getString()的时候,调用AbstractScope的方法getNode()返回IEclipsePreferences对象,里面有配置信息,然后根据这个对象获得配置信息。
分享到:
评论

相关推荐

    android 保存配置文件 SharedPreferences

    在Android开发中,SharedPreferences是系统提供的一种轻量级的数据存储方式,主要用于应用程序中保存简单的配置信息,如用户设置、登录状态等。它采用键值对(key-value pairs)的形式存储数据,支持基本类型如字符...

    Pro Android学习:Preference(首选项)小例子

    在这个“Pro Android学习:Preference(首选项)小例子”中,我们将深入探讨Preference的使用以及它在实际应用中的实现。 首先,Preference的使用始于XML布局文件。在Android资源目录下的res/xml中,开发者会创建一...

    详解Android应用中preference首选项的编写方法

    【Android首选项Preference详解】 首选项(Preference)在Android应用中主要用于实现用户的个性化设置,即用户可以根据自己的喜好调整应用的一些参数。它是Android系统提供的一种便捷的数据存储方式,通常用于存储...

    ICC v4 profiles 色彩配置文件

    sRGB_ICC_v4_Appearance.icc、sRGB_v4_ICC_preference.icc以及sRGB_v4_ICC_preference_displayclass.icc是三种不同的sRGB色彩配置文件,每种都有特定的用途。 1. sRGB_ICC_v4_Appearance.icc:这个配置文件用于定义...

    PS提示配置文件丢失的解决方法

    配置文件是Photoshop保存用户界面布局、首选项、快捷键等个性化设置的数据文件,通常位于系统指定的路径下。当Photoshop启动时,它会读取这些配置文件来设定工作环境。如果配置文件损坏、缺失或者与当前版本不兼容,...

    BGP的配置实例之local preference选路-思科.pdf

    在配置BGP的Local preference选路时,通常有两种方法: 1. **全局修改**:通过设置`bgp default local-preference`命令,可以修改通告给所有IBGP邻居的路由的Local preference值。例如,将所有路由的Local ...

    MyEclipse界面风格preference导出文件

    "MyEclipse界面风格preference导出文件"是指将用户自定义的MyEclipse界面配置保存为一个文件,以便在其他计算机或不同版本的MyEclipse中导入,快速恢复个人化的开发环境。 这个导出的文件通常包含了用户的界面首...

    Android中Preference的使用以及监听事件分析

    4. ListPreference:提供一个下拉列表供用户选择,通常用于设置应用的配置选项。 二、Preference的使用 在XML布局文件中,我们可以创建Preference的实例,并通过属性来定义其行为和外观。例如: ```xml ...

    android Preference自定义样式

    在Android开发中,Preference是用来构建设置界面的一种组件,它提供了用户可以交互的选项,如开关、选择列表等。为了提供个性化的用户体验,开发者有时需要对Preference进行自定义样式。本篇将深入探讨如何在Android...

    sRGB_v4_ICC_preference.icc

    sRGB_v4_ICC_preference.icc 是一个色彩配置文件,用于定义颜色空间转换,特别是针对sRGB(标准红绿蓝)色彩空间的显示和打印。sRGB是一种国际标准的色彩空间,广泛应用于数字图像、网页设计和许多消费电子产品中。...

    Preference

    在这个文件中,你可以定义各种Preference类型的节点,每个节点代表一个设置项。例如: ```xml android:key="checkbox_key" android:title="复选框标题" android:summary="复选框描述" /&gt; android:key=...

    Android Preference组件使用

    Preference主要实现一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依然有效,无须用户再一次进行配置或选择。Android提供preference这个键值对的方式来处理这种情况,自动保存这些数据,...

    自定义Preference

    - `Preference`是Android提供的一个接口,用于表示设置界面中的一个选项。它具有点击响应、存储和恢复状态的能力。 - `PreferenceScreen`是所有设置项的根节点,通常作为一个XML布局文件来定义。 - `...

    Android 自定义preference组件

    3.通过xml文件引用自定义preference组件,res-&gt;xml-&gt;xml文件; 下面通过实例来实现: 1.需求:本实例主要实现一个LinearLayout包含ImageView,Button,TextView,通过点击LinearLayout,ImageView,Button,TextView中...

    Pro Android学习:Preference(首选项)小例子 修改例子7

    恺风2013-12-04上传的Pro Android学习系列中preference部分的例子源代码; 测试第7个例子,大屏的盒子不能使用,做了一些修改,特此分享; 由于原作者有使用资源分,如果我免费的话会影响他的下载,所以我也加1分,...

    Android Preference Framework源码

    这些文件包含各种Preference子类的实例,如CheckBoxPreference、EditTextPreference等。每个Preference元素都有对应的属性,如key(用于标识设置项)、summary(显示在设置项下方作为描述)等。 3. **...

    preference测试

    4. **数据持久化**:`Preference`的改动默认会被保存到SharedPreferences中,这是一个轻量级的键值对存储方式。当用户关闭应用再打开时,之前设置的值会被自动恢复。 5. **测试策略**: - **功能测试**:验证每个`...

    Android中preference的使用实例代码

    它允许开发者轻松地创建具有开关、选择器、输入框等交互元素的配置界面。本篇文章将深入探讨如何在Android项目中使用Preference,通过实例代码来展示其用法。 一、Preference概述 Preference是Android SDK中的一个...

    安卓Android源码——Preference_Demo.rar

    5. **数据持久化**:Preference默认使用SharedPreferences进行数据持久化,每次用户更改设置,都会自动保存到 SharedPreferences 文件中,下次启动应用时,会自动恢复上次的设置状态。 6. **样式和主题**:可以通过...

Global site tag (gtag.js) - Google Analytics