Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android在完全卸载应用程序后“记住”共享首选项_Android_Sharedpreferences - Fatal编程技术网

Android在完全卸载应用程序后“记住”共享首选项

Android在完全卸载应用程序后“记住”共享首选项,android,sharedpreferences,Android,Sharedpreferences,在我的Android应用程序中,我使用一组随机生成的文件名来存储一些数据。为了确保在应用程序重新启动时生成相同的文件名集,并且每个应用程序安装的文件名都不同,我首先从安装应用程序时生成的一长串随机字母数字字符中选取名称作为子字符串。后一个字符串存储在共享首选项中 当我测试这个应用程序时,我遇到了一个相当奇怪的问题。有时我会做一些重大的更改,以便完全卸载该应用程序,甚至强制关闭它并清除其所有数据。在这一点上,我认为如果重新安装该应用程序,该设备将不会事先了解该应用程序。但我发现共享首选项字符串在某

在我的Android应用程序中,我使用一组随机生成的文件名来存储一些数据。为了确保在应用程序重新启动时生成相同的文件名集,并且每个应用程序安装的文件名都不同,我首先从安装应用程序时生成的一长串随机字母数字字符中选取名称作为子字符串。后一个字符串存储在共享首选项中

当我测试这个应用程序时,我遇到了一个相当奇怪的问题。有时我会做一些重大的更改,以便完全卸载该应用程序,甚至强制关闭它并清除其所有数据。在这一点上,我认为如果重新安装该应用程序,该设备将不会事先了解该应用程序。但我发现共享首选项字符串在某种程度上被记住了。如果在此期间我更改了从存储的共享首选项字符串中提取文件名子字符串的方式,则会造成严重破坏

如何确保该应用程序没有先前安装的版本的内存,而该版本随后已被卸载


我过去使用的一种解决方案是,指示Android不要通过清单文件Android:allowBackup=false进行任何备份。然而,我已经放弃了这个想法,因为——除非我弄错了——这实际上意味着当用户决定更换手机时,我会阻止他们将应用程序移植到新设备上。

重新安装时,你的应用程序可能正在通过Google Drive从Google auto backup恢复文件。要禁用此功能,可以在清单中将其显式设置为false:

<manifest ... >
    ...
    <application android:allowBackup="false" ... >
        ...
    </application>
</manifest>
如果您希望对备份/恢复的内容和未备份的内容进行更精确的控制,可以在备份中包括或排除特定文件

请参阅自动备份文档:

如果您不想禁用自动备份,但想重新安装以进行测试,可以执行以下操作之一:

重新安装后清除应用程序数据。这将清除安装时自动恢复的文件 卸载前清除应用程序数据,然后使用以下命令强制执行新备份,以便重置旧备份:adb shell bmgr backupnow 请参阅如何测试备份文档:

重新安装时,您的应用程序可能正在通过Google Drive从Google auto backup恢复文件。要禁用此功能,可以在清单中将其显式设置为false:

<manifest ... >
    ...
    <application android:allowBackup="false" ... >
        ...
    </application>
</manifest>
如果您希望对备份/恢复的内容和未备份的内容进行更精确的控制,可以在备份中包括或排除特定文件

请参阅自动备份文档:

如果您不想禁用自动备份,但想重新安装以进行测试,可以执行以下操作之一:

重新安装后清除应用程序数据。这将清除安装时自动恢复的文件 卸载前清除应用程序数据,然后使用以下命令强制执行新备份,以便重置旧备份:adb shell bmgr backupnow 请参阅如何测试备份文档:

对此进行扩展,例如mobile/src/debug/AndroidManifest.xml

与此类似,此选项可以为调试版本禁用自动备份,但为发布版本启用自动备份


只是因为禁用发布版本的自动备份可能不是预期的结果。

对此进行扩展,例如mobile/src/debug/AndroidManifest.xml

与此类似,此选项可以为调试版本禁用自动备份,但为发布版本启用自动备份


仅仅因为禁用发布版本的自动备份可能不是预期的结果。

基于@hungryghost的建议,我最终实现了一个解决方案

问题:在重新安装应用程序后,Android可以记住共享的首选项,清单中按照Android:allowBackup=false这样的提示不是解决方案

那么,为什么不把问题本身变成一个解决方案呢?我就是这么做的

检查生成特定密钥的共享首选项。 如果找不到钥匙,我会做两件事

清除所有共享首选项,context.deleteSharedPreferncesfilename 现在创建构建特定的密钥 当我更改应用程序时,需要忘记旧的首选项,我只需更改特定于构建的键。
根据@hungryghost的建议,我最终实现了一个解决方案

问题:在重新安装应用程序后,Android可以记住共享的首选项,清单中按照Android:allowBackup=false这样的提示不是解决方案

那么,为什么不把问题本身变成一个解决方案呢?我就是这么做的

检查生成特定密钥的共享首选项。 如果找不到钥匙,我会做两件事

清除所有共享首选项,context.deleteSharedPreferncesfilename 现在创建构建特定的密钥 当我更改应用程序时,需要忘记旧的首选项,我只需更改特定于构建的键。
我们遇到了同样的问题,并通过安卓系统得到了解决:
AndroidManifest.xml中的allowBackup=false。现在用新设备试试,它应该已经解决了。我不知道它是怎么工作的。谢谢你的评论。我的问题有点变了。我曾经尝试过android:allowBackup方法,但正如我现在解释的那样,我发现它会引发其他问题。我刚刚看到了这些评论和您更新的问题。我将修改我的答案。我们遇到了同样的问题,并由android解决:AndroidManifest.xml中的allowBackup=false。现在用新设备试试,它应该已经解决了。我不知道它是怎么工作的。谢谢你的评论。我的问题有点变了。我曾经尝试过android:allowBackup方法,但正如我现在解释的那样,我发现它会引发其他问题。我刚刚看到了这些评论和您更新的问题。我会修改我的答案。我接受并投票支持你的答案,因为你让我走上了正确的轨道。我已经根据你的建议提供了我对这个问题的解决方案,作为一个单独的答案,以帮助其他可能遇到类似情况的人。我接受并投票支持你的答案,因为你让我走上了正确的道路。我已经根据您的建议提供了我的问题解决方案,作为一个单独的答案,以方便其他可能遇到类似情况的人。context.deleteSharedReferencesFileName也可以在单击按钮时执行这里我有一个片段只能在调试版本中访问,几乎不适用于与测试/调试相关的首选项。context.deleteSharedReferencesFileName也可以在单击按钮时执行这里我有一个片段只能在调试版本中访问,几乎不适用于与测试/调试相关的首选项。