Android Files.move()在不同 Android 版本上执行的移动操作逻辑是不同的?

2022-08-30 16:52:07 +08:00
 Vindroid
手上有两台盒子,一台 Android9 的,执行 java.nio.file.Files.move()移动大文件,是改文件指向,耗费就几百毫秒。另一台 Android11 的,执行 move()感觉是 copy+delete 的行为,花费了 30 多秒。使用 Runtime.exec 的结果也是一样,前者几百毫秒,后者 30 多秒。
操作的文件都是 /data/data/packagename/下的,不存在跨分区的原因。
有人说是文件系统格式的问题,但是不支持 df -T 来查看,没看到到底是什么格式的。我对这一块是一点都不了解,有人知道能解答下吗?
4381 次点击
所在节点    Android
6 条回复
mxT52CRuqR6o5
2022-08-30 16:58:14 +08:00
移动文件的 source 和 dest 都是 /data/data/packagename/吗?
xuan_lengyue
2022-08-30 17:12:53 +08:00
估计是跨文件系统了
AoEiuV020CN
2022-08-30 17:19:47 +08:00
安卓 12 没有复现,
/data/data 移到 /sdcard 是会跨分区的,
要验证的话,直接调用 File.renameTo, 看看是不是失败了,move 的逻辑都是 rename 失败就 copy delete ,
Vindroid
2022-08-30 17:33:32 +08:00
@mxT52CRuqR6o5 @AoEiuV020CN 写错了,是从 /data/data/pkg1 -> /data/data/pkg2 ,这两个都是同一个用户和用户组,难道一个应用一个分区?试了下从 /data/data/pkg1/file2 -> /data/data/pkg1/file2 这种是没问题的
mxT52CRuqR6o5
2022-08-30 17:37:12 +08:00
@Vindroid 真有可能是安卓版本问题,安卓的沙箱能力不是一直在加强嘛
okakuyang
2022-08-30 17:48:06 +08:00
应该是沙盒的原因,安卓 9 应该还没有强制文件沙盒,11 应该是强制沙盒的,如果你的 App 没有注册成文件管理器应用应该是不能操作到别的应用的数据的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/876512

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX