[{"data":1,"prerenderedAt":82},["ShallowReactive",2],{"\u002F2012-12-16-android%E9%85%8D%E7%BD%AE%E7%B1%BB%E7%9A%84%E4%BD%BF%E7%94%A8":3},{"id":4,"title":5,"body":6,"date":58,"description":12,"extension":59,"meta":60,"navigation":63,"path":75,"seo":76,"stem":77,"tags":78,"__hash__":81},"blogs\u002F_legacy\u002F2012\u002F2012-12-16-android%e9%85%8d%e7%bd%ae%e7%b1%bb%e7%9a%84%e4%bd%bf%e7%94%a8.md","Android配置类的使用",{"type":7,"value":8,"toc":54},"minimark",[9,13,16,27,30,36,39,45,48],[10,11,12],"p",{},"Android本身提供了应用保存配置的机制，虽然有时我们会希望自己来控制配置的过程，但是利用系统自带的配置也是一个不错的选择。",[10,14,15],{},"最重要的是，由于是系统自带的功能，所以调用起来比较简单。而不用只是为了一两个变量就自己去写配置文件的读取和写入这些东西。现在写东西比较偷懒，基本每次都是复制下面的代码然后改改就用了。",[17,18,23],"pre",{"className":19,"code":21,"language":22},[20],"language-text","\u002F\u002F保存配置信息\nSharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);\nSharedPreferences.Editor editor = settings.edit();\neditor.putString(\"preferences\", mPreferences);\neditor.commit();\n\n\u002F\u002F读取配置信息        \nSharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);\nString mPreferences = settings.getString(\"preferences\", DEFULT_PRES);\n","text",[24,25,21],"code",{"__ignoreMap":26},"",[10,28,29],{},"关于getSharedPreferences()，第一个参数是配置文件本身的标识，只要提供字符串就可以了。第二参数则是标识配置文件的读写权限的，一般情况下用0就好了，文档对这个参数的描述是这样的：",[17,31,34],{"className":32,"code":33,"language":22},[20],"Operating mode. Use 0 or MODE_PRIVATE for the default operation, MODE_WORLD_READABLE and MODE_WORLD_WRITEABLE to control permissions. The bit MODE_MULTI_PROCESS can also be used if multiple processes are mutating the same SharedPreferences file. MODE_MULTI_PROCESS is always on in apps targetting Gingerbread (Android 2.3) and below, and off by default in later versions.\n",[24,35,33],{"__ignoreMap":26},[10,37,38],{},"操作模式是一个bit flag，具体的值对应关系为",[17,40,43],{"className":41,"code":42,"language":22},[20],"MODE_PRIVATE           ---  0000\nMODE_WORLD_READABLE    ---  0001\nMODE_WORLD_WRITEABLE   ---  0010\nMODE_MULTI_PROCESS     ---  0100\n",[24,44,42],{"__ignoreMap":26},[10,46,47],{},"仔细看一下的话就会发现，正如文档所描述的，只有MODE_MULTI_PROCESS这个标识是API Level11之后才有的。这个设定是为了打开配置文件的多进程同时访问功能，大概是随着android版本和对应设备性能的提升才会出现的设计变更。不过大体上程序都不会异步去访问配置，也很少会有多个程序读取相同的配置文件的情况，所以使用的机会比较少。但是既然是bit flag的话，平时就一直设成4就好了。如果想保险起见的话那就先判定一下就好了。",[17,49,52],{"className":50,"code":51,"language":22},[20],"int __sdkLevel = Build.VERSION.SDK_INT;\nSharedPreferences __sp = $context.getSharedPreferences(SETTING_NAME, (__sdkLevel > Build.VERSION_CODES.FROYO) ? 4 : 0);\n",[24,53,51],{"__ignoreMap":26},{"title":26,"searchDepth":55,"depth":56,"links":57},2,3,[],"2012-12-16","md",{"layout":61,"status":62,"published":63,"author":64,"author_login":65,"author_email":66,"author_url":67,"wordpress_id":68,"wordpress_url":69,"date_gmt":70,"excerpt":71},"post","publish",true,{"display_name":65,"login":65,"email":66,"url":67},"chaoshikari","chaoshikari@gmail.com","\u002F",528,"\u002F\u002F?p=528","2012-12-16 04:45:44 +0000",{"type":7,"value":72},[73],[10,74,12],{},"\u002F2012-12-16-android配置类的使用",{"title":5,"description":12},"_legacy\u002F2012\u002F2012-12-16-android%e9%85%8d%e7%bd%ae%e7%b1%bb%e7%9a%84%e4%bd%bf%e7%94%a8",[79,80],"Android","配置类","QU3_1jY3y2TlcZQGJKdq4u7QyopDtP2t8EQ5KaLpKsI",1788763182889]