求解:Activity.MODE_PRIVATE 和Activity.MODE_APPEND的区别

hellotdy 2013-07-29 05:37:01
SharedPreferences的模式,Activity.MODE_PRIVATE 和Activity.MODE_APPEND的区别是什么啊,网上说一个会覆盖,一个会追加,但我用的时候貌似都是追加啊,求高手指教!!
...全文
4679 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
沐白白白白 2015-12-22
  • 打赏
  • 举报
回复
API关于 MODE_PRIVATE: /** * 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). * @see #MODE_WORLD_READABLE * @see #MODE_WORLD_WRITEABLE */ MODE_PRIVATE /** * 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). * @see #MODE_WORLD_READABLE * @see #MODE_WORLD_WRITEABLE */ 但是我好像没试出区别来,。咋的了
sdyxslj 2014-07-11
  • 打赏
  • 举报
回复
代码流程 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); 这人理解,可能有误,请大家指点。 }
荒颜 2013-07-30
  • 打赏
  • 举报
回复
引用 4 楼 hellotdy 的回复:
[quote=引用 3 楼 tanwei4199 的回复:] LZ 2个问题需要纠正下 1.那个是Context的常量 2.对于SharedPreferences来说,使用MODE_APPEND是没有意义的,这个标志表示文件可以追加,即可以继续向一个txt里面写东西,而MODE_PRIVATE 活着其他 会覆盖文件 所以你理解的 “都是追加”不对,因为SharedPreferences本来就可以存多个值,不存在追加问题,他是一个xml文件,不同的key存进去时是不同的item
那用MODE_APPEND是不是和MODE_PRIVATE的效果是一样的吗[/quote] 对于SharedPreferences来说没区别 因为MODE_APPEND应该是不起作用的 不是说的很清楚么 SharedPreferences只有权限的区别 不存在追加不追加 如果只是想自己访问 就写成MODE_PRIVATE 需要让别人访问 写成world_readable 甚至是其他应用访问的话 还有multireadable什么的 MODE_APPEND主要用于存储文件时的选项
顾小林 2013-07-30
  • 打赏
  • 举报
回复
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 就一样了 如果假设不成立, 就不知道了 坐等高手
顾小林 2013-07-30
  • 打赏
  • 举报
回复
重点是后面那句
hellotdy 2013-07-30
  • 打赏
  • 举报
回复
引用 5 楼 shen332401890 的回复:
不一样 public static final int MODE_PRIVATE Added 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_APPEND Added 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 该文件只能被创建他的应用访问(控制访问权限) 功能不同
MODE_PRIVATE好像也是先判断是否有该文件吧
顾小林 2013-07-30
  • 打赏
  • 举报
回复
不一样 public static final int MODE_PRIVATE Added 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_APPEND Added 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 该文件只能被创建他的应用访问(控制访问权限) 功能不同
hellotdy 2013-07-30
  • 打赏
  • 举报
回复
引用 3 楼 tanwei4199 的回复:
LZ 2个问题需要纠正下 1.那个是Context的常量 2.对于SharedPreferences来说,使用MODE_APPEND是没有意义的,这个标志表示文件可以追加,即可以继续向一个txt里面写东西,而MODE_PRIVATE 活着其他 会覆盖文件 所以你理解的 “都是追加”不对,因为SharedPreferences本来就可以存多个值,不存在追加问题,他是一个xml文件,不同的key存进去时是不同的item
那用MODE_APPEND是不是和MODE_PRIVATE的效果是一样的吗
荒颜 2013-07-29
  • 打赏
  • 举报
回复
LZ 2个问题需要纠正下 1.那个是Context的常量 2.对于SharedPreferences来说,使用MODE_APPEND是没有意义的,这个标志表示文件可以追加,即可以继续向一个txt里面写东西,而MODE_PRIVATE 活着其他 会覆盖文件 所以你理解的 “都是追加”不对,因为SharedPreferences本来就可以存多个值,不存在追加问题,他是一个xml文件,不同的key存进去时是不同的item
a_tuzi 2013-07-29
  • 打赏
  • 举报
回复
总共有四个。一般用除了这两个之外的两个 中间用+号
a_tuzi 2013-07-29
  • 打赏
  • 举报
回复
总共有四个。一般用除了这两个之外的两个 中间用+号

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧