我寫了2個應用程序,其數據從互聯網下載。由於此數據(大約40Mb,在幾個zip文件中)是相同的,因此我希望在2個應用程序之間共享它,以便爲用戶消耗更少的帶寬和更少的存儲空間。在Android應用程序之間共享不可變文件
目前,我還沒有找到一個很好的解決方案:
- 的淵源,我在公衆下載目錄中保存的數據。 這是一個簡單的解決方案,但它需要讀取權限,我想避免這種情況。
- 後來我想,我可以使用內容提供商(和inputStreams和mmaped字節緩衝區),但爲核心,我的應用使許多zip文件 在一個大ZipResourceFile其中: 一些壓縮文件的讀取和複製 一些非壓縮文件被mmaped和
所以作爲Lucene的數據庫,我可以約一個簡單的FileProvider忘記,因爲我需要一個文件得到的ZipFile以解壓縮我的數據
此外,它可能會建立一個ZipFileProvider,在那裏我的文件將被放在一個大的ZipResourceFile中,其部分將被服務唉內容提供商,像這樣的庫做:
https://github.com/jarondl/android-zipfileprovider/blob/master/src/net/jarondl/zipfileprovider/ZipFileProvider.java
但是,如果我得到一些通過這樣的ZipFileContentProvider mmaped字節緩衝區,這將是能夠有一個長期和安全的生活嗎? (我應該使用服務?) 如果服務它的ZipFileContentProvider進程死了怎麼辦? 記憶體消耗情況如何?什麼是警告? ContentProvider是不是應該以短命的方式使用?
有沒有更好的解決方案?
UPDATE:
真的很討厭那個機器人不能共享目錄從同一developper(和其他沒有人)一些應用程序。或者可能嗎?
UPDATE2:
我認爲存儲文件的getExternalFilesDir(),但下面的正式警告是讓我非常緊張(什麼寫什麼?):
注意事項雖然提供的目錄getExternalFilesDir()和 getExternalFilesDirs()不是由MediaStore內容提供商 訪問,其他應用程序與READ_EXTERNAL_STORAGE權限的用戶可以訪問 到外部存儲器上的所有文件,包括這些。如果您需要 完全限制文件的訪問權限,則應該將文件寫入 到內部存儲器。
不能使用ZipInputStream封裝從ContentResolver打開的InputStream嗎? –
沒想過。與ZipFileProvider相比,性能應該是可怕的,儘管當你必須遍歷整個文件來讀取最後一個zipEntry時... – Lakedaemon