如何在Android中卸载应用程序时删除共享首选项


103

我有一个android应用程序,可以通过Thats保存登录详细信息(例如用户名和密码)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卸载应用程序时删除它。


11
Android操作系统会在应用程序卸载时自动将其删除...
umair.ali 2013年

感谢您提供
宝贵的

不在我扎根的三星Galaxy 1(Froyo)上。仍留在/dbdata/database/my.package/shared_prefs。不知道这是因为它是扎根的还是因为它是Froyo。一直没能测试新型设备
Nilzor

Answers:


19

SharedPreferences 总是与应用卸载一起删除。

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

编辑时间:2015年4月29日:对于> = 21 API,请参阅@Maher Abuthraa的答案


10
Nexus 6P并非如此,请立即解决。
AndyRoid16年

1
是的,我还观察到在运行Android 6的Nexus 5中不会删除sharedpreferences。我必须在卸载后重新启动设备,并且sharedpreferences现在不见了
Santhana

2
Galaxy S7在这里也有同样的问题。我卸载并在安装后仍然设置了共享首选项。真的很烦,因为我无法仅通过卸载来测试全新安装。
Dpedrinha

2
@Maher Abuthraa有一个正确的答案,这个答案是错误的。
ЮрійМазуревич

1
我最近测试了三星s8 s8 +设备以及不删除共享首选项。三星真的很失望
Vrajesh

298

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

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

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

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

备用棉绒警告

值得一提的是,备份过程就像一个黑匣子..您不知道它何时开始以及两次检查之间的时间间隔...因此最好禁用它。

====更新====

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

tools:replace="android:allowBackup"

在application元素中。归功于@ shahzain-ali

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

希望对您有所帮助。


4
嘿,我注意到在某些设备中,重新启动设备后会保留共享首选项。这有关系吗?如果是这样,在生产应用程序上将此标志设置为false是否安全?会影响用户吗?
Eliahu Horwitz

不建议在生产中设置为false。.用户将在更新过程中丢失所有首选项..如果有必要,则在生产中更好地迁移数据..在调试代码中,首选项可能会更改很多次,因此最好关闭备份
Maher Abuthraa

1
荣誉@MaherAbuthraa ..我面临着这个问题,即在应用程序卸载并重新安装后,某些共享首选项数据会保留。从来不知道这样的事情正在做。
SoulRayder

1
非常感谢!你救了我的命。
翁多

如何确定首选项在更新过程中保留但在手动卸载时被删除?当然,这将是预期的行为。
Gannet

10

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

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

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>

完成。


2
您的问题是您的模块/ AAR之一具有android:allowBackup =“ true” ..这就是为什么您需要使用属性tools:replace再次进行设置。
Maher Abuthraa

即使我保留android:allowBackup="false"并且tools:replace="android:allowBackup"仍然得到我的喜好,不知道出了什么问题?
Shylendra Madda '18

我也遇到同样的问题。添加此代码后,无法清除偏爱
Pawan Soni

5

问题不在于偏好。

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

<application
    android:allowBackup="true"
    android:fullBackupContent="false"></application>

有帮助。顺便说一下,为什么不将allowbackup设置为false?
Shakle

3

设置allowBackup="false"会使应用程序退出备份和还原。

 android:allowBackup="false"

-1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.