簡體   English   中英

為應用程序分配的android內部存儲是否有最大大小?

[英]is there a maximum size to android internal storage allocated for an app?

我想保存一個包含所有應用程序數據的 json 文件(類似於首選項),但我不確定限制大小是多少,因為如果應用程序無法使用此文件,它可能無法運行。 這些信息是否是事先已知的,操作系統會根據可用大小為您的應用程序或其應用程序保留一些空間。

更新:我並不真正關心外部存儲,因為它並不總是在設備中可用並且可以更改(SD 卡),我可以使用它檢查內部存儲,但這不是我想知道的,我想知道的是是否為設備的內部存儲分配了內存大小?

如果您使用Environment.getExternalStorageDirectory() (或Context.getExternalFilesDir() for API level 8 及更高版本)作為 json 文件的位置,那么我相信大小將受到外部存儲(通常是 SD卡片)。 對於大多數設備,我相信 Android 中沒有內置的外部文件存儲固定限制。 (內部存儲是另一回事。設備制造商可以施加相當嚴格的限制,可能低至所有應用程序共享的 100MB。)

更新:請注意,根據Android 2.3兼容性定義(第 7.6.1 節),設備應該有相當多的內存:

設備實現必須至少有 150MB 的非易失性存儲空間可用於用戶數據。 也就是說,/data 分區必須至少為 150MB。

除了上述要求之外,設備實現應該有至少 1GB 的非易失性存儲可用於用戶數據。 請注意,此更高要求計划在未來的 Android 版本中成為硬性最低要求。 強烈建議設備實現立即滿足這些要求,否則它們可能無法兼容未來版本的 Android。

此空間由所有應用程序共享,因此可以填滿。 沒有保證每個應用程序可用的最小存儲空間。 (這種保證的最低限度對於需要存儲超過最低限度的應用程序來說毫無價值,而對於存儲較少的應用程序來說則是一種浪費。)

編輯:來自Android 4.0兼容性定義

設備實現必須有至少 350MB 的非易失性存儲空間可用於用戶數據。 也就是說,/data 分區必須至少為 350MB。

來自Android 4.3兼容性定義

設備實現必須至少有 512MB 的非易失性存儲空間可用於用戶數據。 也就是說,/data 分區必須至少為 512MB。

有趣的是,實現應該提供至少 1GB 的建議保持不變。

我從未見過它限制單個應用程序,並且我已經通過在應用程序文件目錄中保存一些相當大(200 mb)的視頻文件對其進行了測試。

對於內部存儲,我認為您僅受可供所有應用程序共享的內部存儲量的限制。 正如@Ted Hopp 所提到的,在一些較舊和較低端的設備上,它相當小。 但是在更新和更高端的設備上,他們已經開始將其提高到合理的數量,盡管即使設備有很多空間,它仍然可能被其他應用程序占用(因此您需要測試在這種情況)。

還值得指出的是,如果您使用外部存儲(例如 SD 卡),那么您的 json 文件在技術上可以由用戶編輯。 如果他們願意,他們可以在文本編輯器中打開它並開始更改原始值。 (如果您選擇使用內部存儲,這也是可能的,但它需要有 root 的設備,而如果它存儲在 SD 卡上則不需要 root)

因此,如果您存儲的信息不想讓用戶選擇手動編輯,您可能需要考慮到這一點。

我認為有大約 3.61GB 的硬限制。

我目前在我的選項卡上安裝了 termux。 Termux 運行一個 linux 終端,我可以在其中安裝 nodejs 和 npm。 從而從本質上創建一個開發環境。 我安裝的軟件包沒有太多與空間相關的問題,除非我的設備內存非常低。 但是最近。 我想我已經達到了這個限制,這讓我想到了這個問題並點擊了這個頁面。

我的設備存儲遠遠超過 1GB,我使用它的空間低至 200MB,沒有出現此問題。 但是我的 termux 安裝已經增長到 3.61GB。 我最近開始使用紗線,似乎紗線是太空豬。 我正在安裝一個包,它突然記錄: error Could not write file "/data/data/com.termux/files/home/dev/ide/theia/yarn-error.log": "ENOSPC: no space left on device所以它粉碎了安裝並認為我真的用完了空間,但我沒有。進一步檢查表明我仍然有上述空間在內部存儲和紗線已經占據了 750MB,其中 npm 在緩存中只有大約 500MB。我有從那以后一直在使用 npm,但只需要使用 yarn 因為 Theia 的安裝在 npm 上沒有完成。Theia 似乎使用 yarn 作為他們的包管理器。所以 3.61GB 暗示是應用程序 + 數據的硬限制。

刪除一些包並減少其他冗余包使用的一些空間,我獲得空間來創建文件並隨心所欲地安裝,但是一旦我再次達到 3.61GB !!! 繁榮!!! 就是這樣,我不能再創建任何文件了。

我不認為這是有據可查的,但它正在發生。

我正在使用棒棒糖 (android 5.1)

要斷言這一點,其他人應該嘗試使用在其內部沙箱中創建非常大的文件的應用程序。 不在內部存儲中,而是在其私有數據區域中。 我相信你很可能會達到這個硬限制。

至少在某些設備上,/sdcard/Android/data/ 中的每個應用程序肯定有大約 3.5 GB 的上限。 這也適用於 Google 為官方 Android Emulator 提供的圖像。 當我在使用 Unity 構建的某個 Android 應用程序中反復出現“磁盤空間不足”錯誤時,我注意到了這一點,該應用程序下載了大量圖像、視頻、音頻數據。 每次在上述位置的文件夾增長到 3.5 GB 左右時都會發生這種情況。 沒有多少清理空間可以解決這個問題。 然而,關於這種行為的文檔似乎為零。

更新 Ted 的評論;

來自Android 7.0兼容性定義

Android TV 設備必須至少有 4GB 的空間,其他設備實現必須有至少 3GB 的非易失性存儲空間可用於應用程序私有數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM