2016-10-27 8 views
0

У меня есть кнопка «Выход», и после щелчка на них я хочу очистить все данные и кеш приложения. Я нашел в подобных темах в этом методы сайта для удаления данных:Очистить данные приложения программно не работает

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)); 
     } 
     }); 

мое приложение перезапускается, но данные приложения не удаляет файлы. Итак, как программно удалить весь кеш и данные приложения?

+0

«но данные приложения не удаляют» - как вы это определили? – CommonsWare

+0

данные в базе данных не удаляли. общее значение предпочтений не удаляет ... –

+0

Пожалуйста, объясните **, ** подробно **, каждый шаг, который вы сделали, чтобы определить, что «данные в базе данных не удалялись. Значение общих настроек не удаляет». Например, вы прокомментировали 'startActivity()', а затем посмотрите, исчезли ли фактические файлы? Возможно, ваш новый экземпляр «MainActivity» показывает некоторые данные, которые вы кэшировали в памяти. – CommonsWare

ответ

1

Во-первых, ваш код не обязательно удаляет файл, в котором хранятся SharedPreferences. Его местоположение недокументировано, IIRC, и это необязательно должно быть в пределах того, что вы удаляете.

Во-вторых, SharedPreferences сохранены в вашем процессе. Даже если вы успешно удалите файл, кешированный SharedPreferences не будет знать, что вы его удалили. Пока ваш процесс не завершится, вы продолжите доступ к «удаленным» данным SharedPreferences.

Если ваша цель - удалить данные, сохраните данные только в тех местах, где вы управляете, и где вы контролируете, как эти данные будут кэшироваться. Замените использование SharedPreferences чем-то другим (например, базой данных SQLite или некоторым файлом, которым вы управляете сами).