В API 19 (KitKat) представлен новый API:
ActivityManager.clearApplicationUserData () .
Очень рекомендую использовать в новых приложениях:
import android.os.Build.*;
if (VERSION_CODES.KITKAT <= VERSION.SDK_INT) {
((ActivityManager)context.getSystemService(ACTIVITY_SERVICE))
.clearApplicationUserData(); // note: it has a return value!
} else {
// use old hacky way, which can be removed
// once minSdkVersion goes above 19 in a few years.
}
Если вам не нужен хакерский способ, вы также можете скрыть кнопку в пользовательском интерфейсе, так что эта функциональность просто недоступна на старых телефонах.
Знание этого метода обязательно для всех, кто использует android:manageSpaceActivity
.
Всякий раз, когда я использую это, я делаю это из файла, у manageSpaceActivity
которого есть android:process=":manager"
. Там я вручную убиваю любые другие процессы своего приложения. Это позволяет мне позволить пользовательскому интерфейсу продолжать работать, а пользователь сам решает, что делать дальше.
private static void killProcessesAround(Activity activity) throws NameNotFoundException {
ActivityManager am = (ActivityManager)activity.getSystemService(Context.ACTIVITY_SERVICE);
String myProcessPrefix = activity.getApplicationInfo().processName;
String myProcessName = activity.getPackageManager().getActivityInfo(activity.getComponentName(), 0).processName;
for (ActivityManager.RunningAppProcessInfo proc : am.getRunningAppProcesses()) {
if (proc.processName.startsWith(myProcessPrefix) && !proc.processName.equals(myProcessName)) {
android.os.Process.killProcess(proc.pid);
}
}
}
Я просто выкладываю туториал по ссылке ihrupin, размещенной здесь в этом посте.
Поэтому, если вы хотите, чтобы для этого была кнопка, вам нужно вызвать MyApplication.getInstance (). clearApplicationData () из onClickListener
Обновление: ваш
SharedPreferences
экземпляр может удерживать ваши данные и воссоздавать файл настроек после его удаления. Итак, вы захотите получить свойSharedPreferences
объект иОбновить:
Вам нужно добавить
android:name="your.package.MyApplication"
кapplication tag
внутренней AndroidManifest.xml , если вы еще не сделали этого. В противном случаеMyApplication.getInstance()
возвращаетсяnull
, в результате чего возникает исключение NullPointerException .источник
объединить код из 2 ответов:
Вот итоговый ответ на основе комбинированного источника
источник
Самый простой способ сделать это -
Это очистит данные и удалит ваше приложение из памяти. Это эквивалентно опции очистки данных в разделе «Настройки» -> «Диспетчер приложений» -> «Ваше приложение» -> «Очистить данные».
источник
pm
), которые могут не существовать, рискованно. Они не являются частью «контракта» Android SDK, поэтому, существуют ли они на данном устройстве или ведут себя так же, как на других устройствах, зависит от производителей и разработчиков пользовательских ПЗУ.Что использую везде:
источник
Если вам нужен менее подробный хак:
источник