Подтвердить что ты не робот

Метод android finish() не очищает приложение из памяти

У меня есть активность, и я вызываю метод finish(), и действие не очищается из памяти.

После вызова finish() я вижу, что метод onDestroy() успешно выполнен (и я очищаю все мои переменные и прочее там).

Должен ли он быть очищен от памяти или от того, как работает андроид? Насколько я понимаю, жизненный цикл Activity завершен.

И если он хранит приложение в памяти, поэтому он работает быстрее во второй раз, когда пользователь его использует, какие объекты я могу оставить в памяти для повторного использования? Если я правильно понимаю, я должен очистить все на onDestroy.

4b9b3361

Ответ 1

Android поддерживает процессы в случае, если пользователь хочет перезапустить приложение, это ускоряет этап запуска. Процесс не будет делать ничего, и если память должна быть исправлена, процесс будет убит. Не беспокойтесь об этом:)

Ответ 2

Лучший способ - сначала использовать finish() и после этого использовать System.exit(0) для очистки статических переменных. Это даст вам некоторое свободное пространство.

Многие приложения оставляют рабочие процессы и переменные, что меня злит. По истечении 30 минут использование памяти заполнено, и мне нужно запустить диспетчер задач - Lvl 2 clear memory

Это неправда, это проблемы с кузеном, которые я пробовал уже более 3 лет в своих приложениях. Никогда не сбой или перезагрузка после использования Exit()

Ответ 3

Попробуйте использовать

System.exit(0);

Ответ 4

Как только вызов onDestroy() вызывается, ваша деятельность обречена. Период.

При этом процесс (и, следовательно, адресное пространство), выделенный для вашего приложения, может по-прежнему использоваться другой частью вашего приложения - другой деятельностью или службой. Также возможно, что ваш процесс пуст, и ОС просто не успела его восстановить; это не мгновенно.

Дополнительную информацию см. в документе Process Lifecycle:
http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle

Независимо от того, если ваша активность перезапущена, ей снова придется пройти через всю последовательность запуска, начиная с onCreate(). Не предполагайте, что что-то можно косвенно использовать повторно.

Ответ 5

Если вам нужно закрыть приложение из субзависимости, я могу предложить вам сделать его таким образом: 1) из активности A вызывают активность B как startActivityForResult (намерение, REQUEST_CODE);

Intent intent = new Intent()
            .setClass(ActivityA.this, ActivityB.class);
            startActivityForResult(intent, REQUEST_CODE);

2) в действии A вы должны добавить метод:

protected void onActivityResult(int requestCode, int resultCode,
        Intent data) {
    if (requestCode == REQUEST_CODE) {
        if (resultCode == RESULT_CLOSE_APPLICATION) {
            this.finish();
        }
    }
}

3) в завершении завершения операции B:

this.setResult(RESULT_CLOSE_APPLICATION);
this.finish();

Ответ 6

Согласно этой презентации из Google I/O 2008, Finish должен также привести к тому, что процесс будет убит, но я написал быстрое приложение для тестирования этого и на Android 1.5, это не так.

Как сказал Ромен (который, кстати, является инженером инструментария UI для Android), ваш процесс просто будет сидеть там, ничего не делая, поэтому беспокоиться не о чем.

Ответ 7

В качестве быстрого исправления вы можете использовать следующее, чтобы убить ваше приложение:

android.os.Process.killProcess(android.os.Process.myPid());

Но я бы не рекомендовал это для коммерческих приложений, потому что это противоречит тому, как работает система управления памятью Android.