【发布时间】:2016-11-28 22:46:22
【问题描述】:
我写了2个app,数据是从网上下载的。
由于这些数据(大约 40Mb,在几个 zip 文件中)是相同的,我想在 2 个应用程序之间共享它,以便它消耗更少的带宽和更少的用户存储空间。
目前,我还没有找到好的解决方案:
- 原来,我把数据保存在公共下载目录中。 这是一个简单的解决方案,但它需要读取权限,我想避免这种情况。
- 然后我认为我可以使用内容提供程序(以及 inputStreams 和 mmaped ByteBuffers),但核心是,我的应用程序放置了许多 zip 文件 在一个大的 ZipResourceFile 中: 一些压缩文件被读取和复制 一些未压缩的文件被映射并用作 lucene 数据库
所以,我可以忘记一个简单的 FileProvider,因为我需要一个 File 来获取一个 ZipFile 以便解压缩我的数据
另外,可以构建一个 ZipFileProvider,我的文件将被放入一个大的 ZipResourceFile 中,其部分将通过内容提供者提供,就像这个库一样:
https://github.com/jarondl/android-zipfileprovider/blob/master/src/net/jarondl/zipfileprovider/ZipFileProvider.java
但是,如果我通过这样一个 ZipFileContentProvider 得到一些 mmaped ByteBuffer,它是否能够拥有长久而安全的生命呢? (我应该使用服务吗?) 如果为它服务的 ZipFileContentProvider 进程死了怎么办? 内存消耗怎么办?有什么注意事项? ContentProvider 不应该以短暂的方式使用吗?
有没有更好的解决方案?
更新:
android 不能为来自同一个开发者(和其他人)的几个应用程序共享一个目录,这真的很糟糕。或者有可能吗?
更新2:
我考虑将文件存储在 getExternalFilesDir() 上,但是下面的官方警告让我非常紧张(写什么?):
注意虽然 getExternalFilesDir() 提供的目录和 MediaStore 内容无法访问 getExternalFilesDirs() 提供者,其他具有 READ_EXTERNAL_STORAGE 权限的应用程序可以 访问外部存储上的所有文件,包括这些文件。如果你需要 要完全限制对文件的访问,您应该改为编写 您的文件到内部存储。
【问题讨论】:
-
不能用ZipInputStream包装从ContentResolver打开的InputStream吗?
-
没想到。与 ZipFileProvider 相比,性能应该很糟糕,但当您必须遍历整个文件才能读取最后一个 zipEntry...
标签: android file share zipfile bytebuffer