Ответ 1
Android поддерживает процессы в случае, если пользователь хочет перезапустить приложение, это ускоряет этап запуска. Процесс не будет делать ничего, и если память должна быть исправлена, процесс будет убит. Не беспокойтесь об этом:)
У меня есть активность, и я вызываю метод finish(), и действие не очищается из памяти.
После вызова finish() я вижу, что метод onDestroy() успешно выполнен (и я очищаю все мои переменные и прочее там).
Должен ли он быть очищен от памяти или от того, как работает андроид? Насколько я понимаю, жизненный цикл Activity завершен.
И если он хранит приложение в памяти, поэтому он работает быстрее во второй раз, когда пользователь его использует, какие объекты я могу оставить в памяти для повторного использования? Если я правильно понимаю, я должен очистить все на onDestroy.
Android поддерживает процессы в случае, если пользователь хочет перезапустить приложение, это ускоряет этап запуска. Процесс не будет делать ничего, и если память должна быть исправлена, процесс будет убит. Не беспокойтесь об этом:)
Лучший способ - сначала использовать finish()
и после этого использовать System.exit(0)
для очистки статических переменных. Это даст вам некоторое свободное пространство.
Многие приложения оставляют рабочие процессы и переменные, что меня злит. По истечении 30 минут использование памяти заполнено, и мне нужно запустить диспетчер задач - Lvl 2 clear memory
Это неправда, это проблемы с кузеном, которые я пробовал уже более 3 лет в своих приложениях. Никогда не сбой или перезагрузка после использования Exit()
Попробуйте использовать
System.exit(0);
Как только вызов onDestroy() вызывается, ваша деятельность обречена. Период.
При этом процесс (и, следовательно, адресное пространство), выделенный для вашего приложения, может по-прежнему использоваться другой частью вашего приложения - другой деятельностью или службой. Также возможно, что ваш процесс пуст, и ОС просто не успела его восстановить; это не мгновенно.
Дополнительную информацию см. в документе Process Lifecycle:
http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle
Независимо от того, если ваша активность перезапущена, ей снова придется пройти через всю последовательность запуска, начиная с onCreate(). Не предполагайте, что что-то можно косвенно использовать повторно.
Если вам нужно закрыть приложение из субзависимости, я могу предложить вам сделать его таким образом: 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();
Согласно этой презентации из Google I/O 2008, Finish должен также привести к тому, что процесс будет убит, но я написал быстрое приложение для тестирования этого и на Android 1.5, это не так.
Как сказал Ромен (который, кстати, является инженером инструментария UI для Android), ваш процесс просто будет сидеть там, ничего не делая, поэтому беспокоиться не о чем.
В качестве быстрого исправления вы можете использовать следующее, чтобы убить ваше приложение:
android.os.Process.killProcess(android.os.Process.myPid());
Но я бы не рекомендовал это для коммерческих приложений, потому что это противоречит тому, как работает система управления памятью Android.