114

我有一个 android 应用程序来保存登录详细信息,例如用户名和密码,SharedPreferences这可以正常工作,但我需要SharedPreferences在我的应用程序卸载时删除所有使用过的。怎么做?

SavePreferences("one ", "");
SavePreferences("two", "");
LoadPreferences();

 private void SavePreferences(String key, String value){
    sharedPreferences = getSharedPreferences("TEST", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.commit();
   }

 private void LoadPreferences(){
    sharedPreferences = getSharedPreferences("TEST", MODE_PRIVATE);
    String strSavedMem1 = sharedPreferences.getString("MEM1", "");
    String strSavedMem2 = sharedPreferences.getString("MEM2", "");   
   } 

我想SharedPreferences在我的应用程序卸载时删除它。

4

6 回答 6

343

问题不在于偏好。它是彻底的备份管理器!..因为android-23默认备份作为任务存储应用程序的数据,包括云的偏好。稍后当您卸载然后安装较新版本时,您可能会使用恢复的首选项。为避免这种情况,只需将其添加到您的清单中(或至少调试清单):

<application ...
        android:allowBackup="false">
...
</application>

阅读:http: //developer.android.com/guide/topics/data/backup.html

如果您在以下位置运行 Lint,您还将看到Android > Lint > Security

备份时的 lint 警告

在这里值得一提的是,备份过程就像一个黑匣子......你不知道它什么时候开始,以及检查之间的时间......所以最好开发禁用它。

==== 更新 ====

allowbackup设置为后,您可能会遇到清单合并问题false。要解决该问题,请添加:

tools:replace="android:allowBackup"

在应用程序元素中。感谢@shahzain-ali

或者,您可以在卸载应用程序之前清除缓存。

我希望这可能会有所帮助。

于 2016-02-09T16:07:22.163 回答
19

SharedPreferences始终与应用程序卸载一起被删除。

当您卸载任何应用程序时,应用程序在您的内存中所做的所有更改都将被撤销,这意味着您的 SharedPreference 文件、其他数据文件、数据库文件、应用程序将被 Android 操作系统自动删除。

已编辑:29/04/15:对于 >= 21 API,请参阅@Maher Abuthraa 的回答

于 2013-04-08T07:04:53.243 回答
16

它很奇怪,但我通过以下方式找到了解决方案:

  1. 添加Manifest.xml文件xmlns:tools="http://schemas.android.com/tools"的清单标签
  2. 添加Manifest.xml文件android:allowBackup="false"的应用程序标签
  3. 添加Manifest.xml文件tools:replace="android:allowBackup"的应用程序标签

Manifest.xml文件应如下所示。

    <?xml version="1.0" encoding="utf-8"?><!--suppress ALL -->
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.package">

        // Other code

    <application
        android:name="com.package.Application"
        android:allowBackup="false"
        android:hardwareAccelerated="true"
        android:icon="@drawable/appicon"
        android:label="@string/application_name"
        android:largeHeap="true"
        android:theme="@style/AppTheme"
        tools:replace="android:allowBackup">

        <activity
            android:name="com.package.SplashActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/application_name"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        // Other code

    </application>

    </manifest>

完成。

于 2017-07-11T07:56:01.690 回答
7

问题不在于偏好。

使用此代码修复它............

<application
    android:allowBackup="true"
    android:fullBackupContent="false"></application>
于 2018-09-24T10:11:38.810 回答
5

设置allowBackup="false"选择应用程序退出备份和恢复。

 android:allowBackup="false"
于 2017-08-09T05:46:47.103 回答
0

从棉花糖开始,共享首选项不再总是被删除。在清单中添加这一行:“android:allowBackup="false""

于 2020-07-12T15:28:42.667 回答