gpt4 book ai didi

android - App更新时是否删除了内部存储文件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:08:27 25 4
gpt4 key购买 nike

众所周知:

When the user uninstalls your app, the system removes all your app's files from internal storage.

当用户更新应用程序时是否会发生同样的事情?


我为什么要问?我在 raw/ 文件夹中有一个文件,每次运行我的应用程序时我都会将其移动到内部存储(如果尚未移动) :

//On Application onCreate() method:
InputStream jsonFile = ctx.getResources().openRawResource(R.raw.data);
File file = ctx.getFileStreamPath(Helper.FILE_NAME);
if(file.exists())
return; //Exit because the file is already been copied.
FileOutputStream fos = ctx.openFileOutput(Helper.FILE_NAME, Context.MODE_PRIVATE);
copyFile(fos, jsonFile); //my method to copy files.

该文件可能会在应用程序的 future 版本中更新。如果系统在更新应用程序时删除了内部文件,上面的代码就可以了。但是,如果不是这种情况,那么我需要执行另一项检查以确保用户拥有最新版本。像这样:

if(file.exists() && fileVersion == lastVersion) 

最佳答案

仅当您卸载并重新安装时,才会删除内部文件。升级不会删除内部文件——它也不应该。考虑一下,如果这样做,您的数据库也会在每次升级时被删除。

您需要添加额外的支票。

作为引用,以下文档以迂回的方式对此进行了解释:

Storage Options

注意第一段:

Android provides several options for you to save persistent application data.

(强调)

进一步向下Internal Storage然后它说

When the user uninstalls your application, these files are removed.

由于遗漏,我得出结论,由于这些选项是“持久的”,并且仅明确说明文件将在卸载时删除,因此升级将保留这些文件。

我从未见过在升级过程中删除了内部文件,所以根据经验,这也是正确的。

值得一提的是,如果您在 raw 中的文件是只读的,您甚至不需要复制它。 openRawResource() 将为您提供一个 InputStream 并允许您像访问任何其他文件一样访问它。在内部,它只是:一个文件。

复制到外部存储不是一个好的选择,因为用户(在早期的 Android 版本中,任何其他应用程序)可以访问、删除或修改该文件。

关于android - App更新时是否删除了内部存储文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32231170/

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