App Update上是否删除了内部存储文件?

时间:2015-08-26 15:49:01

标签: android 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.

该文件可能会在以后的应用版本中更新。如果系统在更新应用程序时删除内部文件,则上述代码将为“确定”。但是,如果不是这种情况,那么我需要实施另一项检查 以确保用户拥有最新版本 。像这样:

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

2 个答案:

答案 0 :(得分:9)

仅在卸载并重新安装时才会删除内部文件。升级将删除内部文件 - 它不应该。考虑一下,如果它这样做,那么每次升级都会删除你的数据库。

您需要添加额外的支票。

作为参考,以下文档以迂回的方式解释了这一点:

Storage Options

请注意第一段:

  

Android提供了几种保存持久性的选项   申请数据。

(强调补充)

再往下Internal Storage,然后说

  

当用户卸载您的应用程序时,这些文件将被删除。

通过省略我得出结论,因为这些选项是&#34;持久的&#34;并且它只是明确声明这些文件将在卸载时删除,升级将保留这些文件。

我从未见过在升级过程中删除了内部文件,因此从经验上看,这也是正确的。

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

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

答案 1 :(得分:0)

使用external storage,即/sdcard/,即使正在卸载该应用,您的数据也不会被删除。

关于internal storage:之前已经问过这个问题:Android Internal Storage when updating application

最后,我不会遗漏任何机会 - 总是一定要检查!