V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Vindroid
V2EX  ›  Android

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

  •  
  •   Vindroid · 2022-08-30 16:52:07 +08:00 · 8510 次点击
    这是一个创建于 816 天前的主题,其中的信息可能已经有所发展或是发生改变。
    手上有两台盒子,一台 Android9 的,执行 java.nio.file.Files.move()移动大文件,是改文件指向,耗费就几百毫秒。另一台 Android11 的,执行 move()感觉是 copy+delete 的行为,花费了 30 多秒。使用 Runtime.exec 的结果也是一样,前者几百毫秒,后者 30 多秒。
    操作的文件都是 /data/data/packagename/下的,不存在跨分区的原因。
    有人说是文件系统格式的问题,但是不支持 df -T 来查看,没看到到底是什么格式的。我对这一块是一点都不了解,有人知道能解答下吗?
    6 条回复    2022-08-30 17:48:06 +08:00
    mxT52CRuqR6o5
        1
    mxT52CRuqR6o5  
       2022-08-30 16:58:14 +08:00
    移动文件的 source 和 dest 都是 /data/data/packagename/吗?
    xuan_lengyue
        2
    xuan_lengyue  
       2022-08-30 17:12:53 +08:00
    估计是跨文件系统了
    AoEiuV020CN
        3
    AoEiuV020CN  
       2022-08-30 17:19:47 +08:00
    安卓 12 没有复现,
    /data/data 移到 /sdcard 是会跨分区的,
    要验证的话,直接调用 File.renameTo, 看看是不是失败了,move 的逻辑都是 rename 失败就 copy delete ,
    Vindroid
        4
    Vindroid  
    OP
       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
        5
    mxT52CRuqR6o5  
       2022-08-30 17:37:12 +08:00
    @Vindroid 真有可能是安卓版本问题,安卓的沙箱能力不是一直在加强嘛
    okakuyang
        6
    okakuyang  
       2022-08-30 17:48:06 +08:00
    应该是沙盒的原因,安卓 9 应该还没有强制文件沙盒,11 应该是强制沙盒的,如果你的 App 没有注册成文件管理器应用应该是不能操作到别的应用的数据的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2188 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 00:19 · PVG 08:19 · LAX 16:19 · JFK 19:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.