以编程方式清除应用数据无效

时间:2016-10-27 14:23:53

标签: android appdata app-data

我有一个按钮" Logout",点击后我想清除应用程序的所有数据和缓存。我在这个网站的类似主题中找到了删除数据的方法:

   public void clearApplicationData() {
    File cache = getCacheDir();
    File appDir = new File(cache.getParent());
    if(appDir.exists()){
        String[] children = appDir.list();
        for(String s : children){
            if(!s.equals("lib")){
                deleteDir(new File(appDir, s));
            }
        }
    }
}

public boolean deleteDir(File dir) {
    if (dir != null && dir.isDirectory()) {
        String[] children = dir.list();
        for (int i = 0; i < children.length; i++) {
            boolean success = deleteDir(new File(dir, children[i]));
            if (!success) {
                return false;
            }
        }
    }

    return dir.delete();
}

但是当我使用代码时:

logoutButton.setOnClickListener(new View.OnClickListener() {
          @Override
           public void onClick(View v) {
           clearApplicationData();
           finish();
           startActivity(new Intent(ProfileActivity.this, MainActivity.class));
       }
      });

我的应用重启,但应用数据不会删除。那么,如何以编程方式删除app的所有缓存和数据?

1 个答案:

答案 0 :(得分:1)

首先,您的代码不一定会删除存储SharedPreferences的文件。它的位置没有记录,IIRC,它不一定必须在你删除的范围内。

其次,SharedPreferences会缓存在您的流程中。即使您成功删除了该文件,缓存的SharedPreferences也不会知道您已将其删除。在您的流程终止之前,您将继续访问&#34;已删除的&#34; SharedPreferences数据。

如果您的目标是能够删除数据,则只将数据存储在您控制的位置,以及控制数据缓存方式的位置。将SharedPreferences替换为其他内容(例如,SQLite数据库或您自己管理的某个文件)。