Android应用程序在卸载并重新安装后会记住它的数据

在开发一款面向4.1以上版本的Android应用程序时,我发现卸载我的应用程序并重新安装它并不能清除它的数据。

该应用程序旨在存储它在第一屏中提出的细节。 在操作系统版本4.4.4中再次卸载并安装后,应用程序会提示用户填写数据,这是正常的。 但是,在6.0版本中,相同的安装/卸载序列将带回原始input的数据。

我试图通过访问/data/data/my package folder来确保卸载后数据库已经消失,而且确实在卸载过程中删除了该文件夹。

我尝试通过Titanium Backup访问设置页面来删除应用程序,结果相同。 该设备是根植Nexus 5运行v6.0。

这个奇怪的行为可能是什么原因?

这是因为Android 6具有自动备份function。 如果您不希望备份数据或者要包含或排除某些资源,则需要在清单中调整android:allowBackupandroid:fullBackupContent 。 这不是一个错误。

greywolf82的答案是正确的,但我想添加一些信息。

在开发我的Android应用程序(使用Xamarin)时,我注意到无论何时从Visual Studio重新启动应用程序,我的数据都会恢复到几个月前的数据。 如果我简单地停下来,并从VS重新运行它,或者如果我完全卸载了应用程序并重新安装,这并不重要。

还值得注意的是,我们从来没有明确告诉应用程序存储备份。

从Visual Studio启动时,备份似乎也覆盖了更新的数据,而且我们也有用户使用我们的应用程序的发布版本的报告,同时也得到了由备份覆盖的更新的数据。

由于我不知道备份和恢复的具体时间,因此这个function似乎只会导致问题。

我们已经修改了我们的AndroidManifest,如下面的xml所示:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.XXXXXXX" android:versionName="8.0.0" android:installLocation="auto" android:versionCode="439"> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="24" /> <application android:label="XXXXXXXXXXXX" android:icon="@drawable/icon_small" android:installLocation="internalOnly" android:largeHeap="true" android:allowBackup="false" android.fullBackupOnly="false" /> ... </manifest> 

一旦我们明确地将这个值设置为false,似乎所有的工作。 我希望这是一个selectjoinfunction,但是…似乎它可能是默认情况下应用程序不指定任何一种方式的价值。