iTu*_*rki 5 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.
Run Code Online (Sandbox Code Playgroud)
该文件可能会在以后的应用程序版本中更新.如果系统在更新应用程序时删除内部文件,则上述代码将为"确定".但是,如果不是这种情况,那么我需要执行另一项检查以确保用户具有最新版本.像这样的东西:
if(file.exists() && fileVersion == lastVersion)
Run Code Online (Sandbox Code Playgroud)
仅在卸载并重新安装时才会删除内部文件.升级不会删除内部文件 - 它不应该删除.考虑一下,如果它这样做,那么每次升级都会删除您的数据库.
您需要添加额外的支票.
作为参考,以下文档以迂回的方式解释了这一点:
注意第一段:
Android提供了几种保存持久 应用程序数据的选项.
(重点补充)
然后在内部存储下进一步说明
当用户卸载您的应用程序时,将删除这些文件.
由于省略,我得出结论,由于这些选项是"持久的",并且只是明确声明文件将在卸载时删除,因此升级将保留这些文件.
我从未在升级过程中看到内部文件被删除,所以从经验上看,这也是正确的.
对于它的价值,如果你所拥有的文件raw是只读的,你甚至不需要复制它.openRawResource()会给你一个InputStream并允许你像任何其他文件一样访问它.在内部,它只是:一个文件.
复制到外部存储不是一个好的选择,因为用户(以及早期的Android版本,任何其他应用程序)可以访问,删除或修改该文件.
| 归档时间: |
|
| 查看次数: |
3500 次 |
| 最近记录: |