LZ  2个问题需要纠正下1.那个是Context的常量
2.对于SharedPreferences来说,使用MODE_APPEND是没有意义的,这个标志表示文件可以追加,即可以继续向一个txt里面写东西,而MODE_PRIVATE 活着其他  会覆盖文件
所以你理解的 “都是追加”不对,因为SharedPreferences本来就可以存多个值,不存在追加问题,他是一个xml文件,不同的key存进去时是不同的item

解决方案 »

  1.   

    那用MODE_APPEND是不是和MODE_PRIVATE的效果是一样的吗
      

  2.   

    不一样public static final int MODE_PRIVATEAdded in API level 1
    File creation mode: the default mode, where the created file can only be accessed by the calling application (or all applications sharing the same user ID).
    public static final int MODE_APPENDAdded in API level 1
    File creation mode: for use with openFileOutput(String, int), if the file already exists then write data to the end of the existing file instead of erasing it.从SDK对于这两个常量的描述来看 他们控制的功能不一样 MODE_APPEND 的功能是判断是否有该文件,如果有在后面添加,而不是擦除MODE_PRIVATE 该文件只能被创建他的应用访问(控制访问权限)功能不同
      

  3.   

    MODE_PRIVATE好像也是先判断是否有该文件吧
      

  4.   

    Constant Value: 0 (0x00000000)  MODE_PRIVATE
    Constant Value: 32768 (0x00008000) MODE_APPEND
    Constant Value: 1 (0x00000001) MODE_WORLD_READABLE
    Constant Value: 2 (0x00000002) MODE_WORLD_WRITEABLE应该是最后两位决定权限!~ 如果猜测没有错 那么 append 和 private 就一样了
    如果假设不成立, 就不知道了 坐等高手
      

  5.   

    那用MODE_APPEND是不是和MODE_PRIVATE的效果是一样的吗对于SharedPreferences来说没区别  因为MODE_APPEND应该是不起作用的
    不是说的很清楚么  SharedPreferences只有权限的区别  不存在追加不追加
    如果只是想自己访问  就写成MODE_PRIVATE  需要让别人访问  写成world_readable  甚至是其他应用访问的话  还有multireadable什么的
    MODE_APPEND主要用于存储文件时的选项
      

  6.   

    代码流程
    ContextImpl.java
    getSharedPreferences(String name, int mode) sp = new SharedPreferencesImpl(prefsFile, mode);
    SharedPreferencesImpl.java
    commit()---->enqueueDiskWrite()---->writeToFile()---->setFilePermissionsFromMode()getSharedPreferences(String name, int mode)  mode对应传入的是 MODE_PRIVATE 或者 MODE_APPEND在函数 setFilePermissionsFromMode 中不管传入的是MODE_PRIVATE 还是 MODE_APPEND 对perms 没有影响,传入MODE_PRIVATE  还是MODE_APPEND 最终效果是一样的,而perms决定是覆盖文件,还是在文件后面继续添加内容 static void setFilePermissionsFromMode(String name, int mode,
                int extraPermissions) {
            int perms = FileUtils.S_IRUSR|FileUtils.S_IWUSR
                |FileUtils.S_IRGRP|FileUtils.S_IWGRP
                |extraPermissions;
            if ((mode&MODE_WORLD_READABLE) != 0) {
                perms |= FileUtils.S_IROTH;
            }
            if ((mode&MODE_WORLD_WRITEABLE) != 0) {
                perms |= FileUtils.S_IWOTH;
            }
            if (DEBUG) {
                Log.i(TAG, "File " + name + ": mode=0x" + Integer.toHexString(mode)
                      + ", perms=0x" + Integer.toHexString(perms));
            }
            FileUtils.setPermissions(name, perms, -1, -1);这人理解,可能有误,请大家指点。
    }