在android中,不可移动(内部)的外部存储和内部存储有什么区别?我不确定在哪里保存我的数据。我只需要保存一个人可以随时拉取的游戏统计数据
谢谢
在许多较新的设备中,将不再存在物理区别,“内部”和“外部”存储共享相同的闪存芯片,甚至不一定具有固定分配,因此差异实际上仍然是预期访问范式之一。
外部存储上的文件(真实的或模拟的)不可避免地与所有东西共享,并且可以被任何具有该清单权限的东西修改。传统上,它们很容易看到,尽管使用最近的 MTP 访问设备,系统可能需要在连接的 PC 看到它们之前被告知它们。
相反,内部存储上的文件对应用程序来说是私有的,除了以 root 或系统运行的任何文件,或者如果应用程序决定让它们通常可见或可更改。即使可以访问,内部存储上的数据也可能更难以在拥有的应用程序之外访问 - 它不受面向消费者的 USB 大容量存储或 MTP 机制的支持,即使对于其他应用程序和开发工具,也很难找到它,除非您知道在哪里查看,因为虽然您可以检查应用程序选择共享的文件夹,但您无法浏览父文件夹(通常是 /data 或 /data/app)。
您的决策过程可能应该是这样的:它是否意味着对拥有的应用程序是私有的?如果是这样,请将其放在内部存储上,除非它太大并且针对旧设备,在这种情况下,您可能需要在放置到外部存储之前对其进行加密和/或签名以进行保护。否则,如果要共享,需要交给任意其他组件(电子邮件应用程序等),或者很大,请将其放在外部存储上。
在android中,不可移动(内部)的外部存储和内部存储有什么区别?
外部存储从不意味着可移动。它始终意味着“用户可以通过插入 USB 电缆并将其作为驱动器安装在主机上来访问”。早期的 Android 设备碰巧有可移动的外部存储,但这从来都不是定义。
内部存储是用户无法访问的存储,除非通过已安装的应用程序(或通过植根他们的设备)。
如果您担心外部存储(SD 卡),除了克里斯的回答之外,您可以在每次加载应用程序时简单地检查一下,然后相应地提取相关信息。
你可以使用这样的东西:
if(isSDPresent)
{
// SD Card is present
// Your code goes here, files will be located @ /mnt/sdcard/Android/data/packagename
}
else
{
// SD Card is not presenet
// files located here /data/data/packagename
}
如果您在模拟器上进行测试,您可以加载 DDMS 并找到存储在 revlent 位置的所有文件。
希望这可以帮助。