获得首选项的默认为
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的保存配置文件的demo,通过这个应该就能明白其他的保存配置文件的相关方法,使用的是SharedPreference ,希望对大家有帮助,还有做的不好的不吝赐教
这是Pro Android学习系列中preference部分的例子源代码。
主要介绍了Android应用中preference首选项的编写方法,或许Apple将其翻译为'偏好设置'更直观些,即用户对应用的一些个性化调整菜单,需要的朋友可以参考下
Preference主要实现一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依然有效,无须用户再一次进行配置或选择。Android提供preference这个键值对的方式来处理这种情况,自动保存这些数据,...
MyEclipse界面风格preference导出文件
3.通过xml文件引用自定义preference组件,res->xml->xml文件; 下面通过实例来实现: 1.需求:本实例主要实现一个LinearLayout包含ImageView,Button,TextView,通过点击LinearLayout,ImageView,Button,TextView中...
恺风2013-12-04上传的Pro Android学习系列中preference部分的例子源代码; 测试第7个例子,大屏的盒子不能使用,做了一些修改,特此分享; 由于原作者有使用资源分,如果我免费的话会影响他的下载,所以我也加1分,...
Preference java Code Style Formatter import导入文件,重新配置eclipse
android Preference自定义样式
Preference组件是android的SharePreferences的衍生品,Preference组件的状态值是默认永久的保存在/data/data/包名/shared_prefs 目录下,因为Android系统的Setting应用及一些符合Android设计思想的应用的设置界面...
preference测试
详细介绍了系统中 Preference 各个控件的特性和使用方式
libgdx Preference
Based on support-preference from Android Support Library, adding a lot of exciting features. Sample How to use add dependencies // replace with version above implementation 'moe.shizuku.preference...
BGP的配置实例之local preference选路-思科.pdf 学习资料 复习资料 教学资源
黑色主题epf格式文件用eclipse import ->general->preference jar包文件 直接放入eclipse目录下的dropins\plugins
Laravel开发-preference Laravel的简单偏好包
sRGB_v4_ICC_preference.icc
Android Preference Framework源码~~~~~~~~~~~~~~~~~