gpt4 book ai didi

android - android(getCacheDir())中的缓存文件夹在功能上等同于iOS(NSCachesDirectory)中的缓存文件夹吗?

转载 作者:行者123 更新时间:2023-11-29 15:42:58 25 4
gpt4 key购买 nike

我在应用程序中有一些可下载的内容(例如:游戏角色图像),在iOS中将它们保存到NSCachesDirectory路径中,我遵循iOS的准则,即应将可下载的内容保存在NSCachesDirectory中,该目录是缓存目录。我是否在将文件保存到android端的getCacheDir()中感到很挣扎。

起初,我认为iOS中的缓存文件夹应该与android中的缓存文件夹等效(或相似),但是在查看了一些文档之后,我怀疑它们在功能上是否相同:

1.iOS建议将一些可下载的内容保存在缓存文件夹中,这样的内容在tmp中更持久。但是在android中,文档说getCacheDir()应该存储缓存文件而不是持久文件,这使我怀疑android缓存文件夹的工作方式更像iOS中的tmp文件夹

2.我在iOS缓存文件上找不到任何大小限制准则,但是android side表示它应该有合理的大小限制,例如1 MB(我认为我的内容将远远超过1 MB,例如50到100 MB)。

所以我的问题是,iOS缓存文件夹在功能上是否等同于android中的缓存文件夹?在iOS端使用NSCachesDirectory的地方在android端使用getCacheDir()是否正确?如果没有,当我在iOS端使用NSCachesDirectory时,应该在android端使用哪个路径?

最佳答案

否,iOS缓存文件夹在功能上不等同于缓存
android中的文件夹。

有关Android的所有数据存储选项的更多详细信息,请查看official docs here

在用于存储大量数据的Android中,您可以使用内部或外部数据存储选项,也可以根据需要将数据设为内部或外部数据存储选项的 private 数据。

内部存储
每个应用程序都有自己的专用内部存储器来保存文件。如果用户无法从您的应用程序外部修改文件,并且其他应用程序不能访问这些文件,则使用这种存储方式。由于内部存储器是您的应用程序专用的文件,因此,如果您卸载了应用程序,则文件将被删除。内部存储器也是默认情况下安装应用程序的位置,因此您的文件将始终可用。在某些较旧或更便宜的设备上,内部存储空间非常有限,因此,如果需要支持这些设备,则需要注意保存的数据大小。

绝对不要硬编码存储目录的路径,因为该目录可能会根据所使用的Android OS的版本而变化。同样,Android 4.4引入了多个用户的概念:在这种情况下,内部和外部存储取决于登录的用户,其他用户的文件将不可见。以下是一些用于获取内部存储路径的方法:

  • android.content.Context.getFilesDir():返回一个java.io.File对象,该对象表示应用程序从当前上下文中获取内部存储的根目录。
  • android.content.Context.getDir(字符串名称,Context.MODE_PRIVATE):返回一个java.io.File对象,该对象表示内部存储中的目录名称,如果目录不存在,则创建该目录。第二个参数还可以用于将目录设置为MODE_WORLD_READABLE或MODE_WORLD_WRITABLE,因此它在所有其他应用程序中都可见,但这在安全性方面是有风险的,并且在API级别17(Android 4.2)中已弃用。
  • android.content.Context.getCacheDir():返回一个java.io.File对象,该对象表示应用程序的内部缓存目录。这意味着小文件(文档建议总共不超过1MB)可以在系统需要更多存储空间时随时删除。无法保证将清除缓存,因此,当不再需要这些文件时,还必须手动清除它们。

  • 如您所见,文件由java.io namepace中的File对象表示:没有特定于Android SDK的文件对象,并且使用用于读取和写入文件的标准Java API。另外,由于Android清单已经是应用程序专用的,因此没有在Android清单中设置特定的应用程序权限以使用内部存储。

    外部存储
    除了内部存储,在卸载应用程序时,所有应用程序还共享一个外部存储空间。这是使用文件资源管理器应用程序以及将设备插入计算机时显示的存储。它可能被实现为可移除的SD卡,或者被实现为设备中内置存储的分区,因此即使移除或更改了该卡,您的应用程序也应该能够工作。要检查外部存储的当前状态,可以调用getExternalStorageState()方法。

    在具有许多用户的设备(从Android 4.4开始)上,外部存储设备专用于当前用户,并且其他用户的文件无法访问。此外,如果设备具有内置外部存储器(该内部存储器是内部存储器和SD卡上的分区),则可能会有多个外部存储器:在这种情况下,内置存储器是主要的外部存储器。从外部存储读取文件需要READ_EXTERNAL_STORAGE权限,而写入或读取文件则需要WRITE_EXTERNAL_STORAGE权限。

    这是您应该用来获取主要外部存储目录的方法:
  • android.os.Environment.getExternalStorageDirectory():返回一个java.io.File对象,该对象代表所有应用程序共享的设备主要外部存储的根目录。
  • android.os.Environment.getExternalStoragePublicDirectory():返回一个java.io.File对象,该对象代表设备主要外部存储上特定类型文件的 public 目录。例如,您可以通过调用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)来获取 public 音乐目录的路径,或者通过调用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)来获取 public 图片目录的路径。
  • android.content.Context.getExternalFilesDir():返回一个java.io.File,它表示特定于您的应用程序的主外部存储的根目录,该目录位于getExternalStorageDirectory()返回的目录下。与外部存储的其他目录不同,卸载应用程序时,存储在该文件夹中的文件将被删除。因此,如果您需要存储应用程序只需要的文件,则应使用此文件夹。另外,从Android 4.4开始,应用程序无需读取或写入其自身的外部存储就具有特定的权限,但是对于较旧的版本,您的应用程序需要READ_EXTERNAL_STORAGE或WRITE_EXTERNAL_STORAGE权限。
  • android.content.Context.getExternalFilesDirs():返回一个java.io.File数组,该数组表示应用程序可以使用的所有外部存储目录的根目录,而主要外部存储是该目录中的第一个目录。数组。所有这些目录的工作方式与getExternalFilesDir()方法返回的主存储相同。如果设备具有内置存储设备作为主要外部存储设备,并且具有SD卡作为辅助外部存储设备,则这是通往SD卡的唯一途径。此方法是在Android 4.4中引入的,在此之前无法获得通往二级存储的路径。
  • android.content.Context.getExternalCacheDir():返回一个java.io.File对象,该对象表示应用程序在主外部存储上的缓存。该缓存对用户不可见,并且在卸载应用程序时将其删除。 Android SDK中没有机制可删除缓存目录中的文件,因此您需要管理缓存以使其保持在合理的最大大小。从Android 4.4开始,该应用程序不需要访问其自己的缓存的权限,但是对于旧版本,您的应用程序需要READ_EXTERNAL_STORAGE或WRITE_EXTERNAL_STORAGE权限。
  • 关于android - android(getCacheDir())中的缓存文件夹在功能上等同于iOS(NSCachesDirectory)中的缓存文件夹吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37477071/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com