Можно ли удалить данные из общих настроек, когда приложение удалено из списка последних?

Мне нужно очистить данные из SharedPreference, когда приложение будет удалено из списка последних.

Есть ли способ для этого?


person George Thomas    schedule 22.02.2018    source источник
comment
Объясните подробно   -  person Ali    schedule 22.02.2018


Ответы (5)


Как уже было сказано, нет никакой гарантии, что вы получите обратный вызов, когда ваше приложение будет убито, независимо от того, какой обратный вызов вы попытаетесь использовать. Тем не менее, мне все еще интересно, почему вы используете SharedPreferences, если вы не хотите, чтобы эти данные были постоянными, это не относится к этому классу. При этом вы должны обрабатывать данные, как и любые другие данные внутри вашего приложения.

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

person Iulian Popescu    schedule 22.02.2018

Какое действие вызывается при удалении приложения из последний список в Android?

В приведенной выше ссылке рассказывается, как ввести метод обратного вызова при удалении приложения из списка последних. Затем вы можете обновить свою общую переменную в этой функции.

person Maaz Bin Musa    schedule 22.02.2018

Я так не думаю, когда приложение очищается от фона, метод onDestroy() в большинстве случаев не вызывается. Следовательно, приложение не получает никакого метода обратного вызова для этого. Если вы хотите это сделать, то почему бы вам не использовать некоторую статическую переменную или объекты (если это возможно) в классе приложения, в зависимости от требований. Они будут повторно инициализироваться каждый раз при запуске приложения, может быть, если это может вам помочь.

person Pritish    schedule 22.02.2018

Вы можете сделать это с помощью Service.

Создайте липкую службу:

и переопределите функцию onTaskRemoved, чтобы очистить ваши общие настройки.

public class CheckAppRemovedService extends Service {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        super.onTaskRemoved(rootIntent);
        //YOUR CODE TO CLEAR SHARED PREFS.
    }
}

Запустите службу, когда вы начнете свою деятельность.

Intent intent = new Intent(MyActivity.this, CheckAppRemovedService.class);
startService(intent);
person SripadRaj    schedule 22.02.2018
comment
Я проверил, предоставив лог, но лог все равно не получен. - person George Thomas; 22.02.2018
comment
вы запустили сервис в своей деятельности? И да, я забыл объявить вашу службу в вашем манифесте. :П - person SripadRaj; 22.02.2018
comment
onTaskRemoved() не вызывается на некоторых устройствах обмена мгновенными сообщениями. Таким образом, вы должны проверить несколько устройств. - person Ketan Patel; 22.02.2018
comment
как насчет запуска службы? где вы поместили код намерения для запуска службы? в каком методе деятельности? - person SripadRaj; 22.02.2018
comment
мое устройство mi, позвольте мне проверить другое. - person George Thomas; 22.02.2018
comment
я запускаю службу в onCreate() моей основной деятельности. - person George Thomas; 22.02.2018
comment
@KetanBhensdadia Да, сообщалось, что это происходит с устройствами Xiaomi и Huawei. Похоже, они делают это как часть производительности батареи. Спасибо за обновление :) - person SripadRaj; 22.02.2018
comment
Это не будет работать в Android Oreo. См. developer.android.com/about/versions/oreo/background.html - person Iulian Popescu; 22.02.2018
comment
какие-либо другие решения для решения проблемы в телефонах mi? - person George Thomas; 22.02.2018

введите здесь описание изображения

Когда приложение удаляется из списка недавних, вызывается метод onDestroy(). Поэтому очистите свои значения SharedPreference, когда будет вызываться метод onDestroy().

    @Override
    protected void onDestroy() {
        super.onDestroy();

        SharedPreferences.Editor editor = getSharedPreferences("APP", MODE_PRIVATE).edit();
        editor.putString("YOUR_DATA_KEY", "").apply(); //data nullified
    }

См. жизненный цикл активности в Android ниже:

Жизненный цикл активности в Android

person sam    schedule 22.02.2018
comment
Это не правильно! onDestroy никогда не будет вызываться, когда приложение будет уничтожено, но когда пользователь существует, продолжая использовать приложение. - person Iulian Popescu; 22.02.2018