卸载 android 应用程序会删除存储在 sdcard 上的数据库吗?

Posted

技术标签:

【中文标题】卸载 android 应用程序会删除存储在 sdcard 上的数据库吗?【英文标题】:Does uninstalling of an android app delete the database stored on sdcard? 【发布时间】:2011-10-30 08:07:01 【问题描述】:

我有一个图书馆应用程序,我将每本书存储为 SqliteDatabase。我将所有书籍数据库保存在 sdcard 上。我的问题是如果用户卸载我的应用程序,那么与该应用程序相关的所有数据库都会被删除吗?如果没有,我该如何实现?

谢谢。

【问题讨论】:

【参考方案1】:

答案是..所有内容都被删除了..包括SharedPreference和db..你不需要自己实现它..更红这个..http://developer.android.com/guide/topics/data/data-storage.html

【讨论】:

【参考方案2】:

实际上没有。卸载时,APK 本身 (/data/app/com.example.app-1.apk) 和 /data/data/com.example.app 中的数据 (sharedprefs/db/etc) 会被删除,但只有 Android >= 2.2 还会从 sdcard 中删除任何内容,并且只删除特定目录 getExternalFilesDir()(通常是 /sdcard/Android/data/com.example.app)。

但是,一些早期版本的 Froyo 也将delete when updating 应用程序,这使得用于持久存储相当危险。

【讨论】:

好的,那么我应该如何以及在哪里存储这些文件以避免这种不可预测的行为?如果存储在内部存储中,那么它很快就会被填满并开始给出 SqliteFullException。存储如此大量文件的最佳选择是什么? 我使用 /sdcard/data/com.example.app 。这是一致的,因为它永远不会在卸载或更新时被删除。而且它不在根级别,因此用户不会讨厌它留下的混乱。代替硬编码“/sdcard”,使用 Environment.getExternalStorageDirectory() 并附加 /data/ 和你的包名。 那么,如果我使用/sdcard/data/com.example.app,那么所有的数据库都会在卸载时被删除,对吧?另外,用户可以访问这些文件吗? 不,卸载时不会删除任何存储在那里的内容。没有可靠的方法可以在卸载时从 sdcard 中删除某些内容,而不会冒在更新旧版本的 froyo 时将其删除的风险。 (并且在 ecliar 或更早版本上根本不会被删除) 是的,所有的 sdcard 都是公开的。【参考方案3】:

这取决于。如果您将文件放在外部存储(SD 卡)上的任意位置,则在您卸载应用程序后它们不会被删除。如果您使用getExternalFilesDir() (Android 2.2+) 来获取存储文件的目录,则在卸载应用程序时它们将被删除。在 Froyo 的某些早期版本中,显然存在一个错误,即使在应用升级时也会删除文件,因此您可能需要注意这一点。

【讨论】:

以上是关于卸载 android 应用程序会删除存储在 sdcard 上的数据库吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android 6.0 - 卸载应用程序时删除的外部存储文件

android 各个存储路径及获取方法总结

android-数据存储之SharedPreferences

Android File存储:文件读写

Android 中内部存储和外部存储的理解与应用

Android 10 分区存储