Кнопка выхода из Android-приложения

Я не уверен, нужно ли мне добавлять кнопку выхода в мое приложение. Есть ли смысл это делать? И если при выходе из одного действия или службы не будет .finish() или закрыто должным образом, может ли это нанести большой ущерб?


person Community    schedule 03.11.2010    source источник


Ответы (10)


Вам не нужно добавлять кнопку выхода. Если вы этого не сделаете, ваша активность будет просто храниться в памяти, пока система не восстановит ее. Он не будет потреблять процессор.

Конечно, если у вас есть какие-либо рабочие потоки, вы должны остановить их в onStop() или onPause(), в зависимости от того, что делают ваши потоки.

Многие приложения по какой-то причине добавляют кнопку выхода. Я предполагаю, что причина в том, что они не верят в то, что напишут правильный код, или не верят в то, что ОС Android должна правильно очиститься.

Невыполнение правильных процедур отделки не причинит вреда никому, кроме вас самих.

person Robert    schedule 03.11.2010
comment
Я подозреваю, что люди просто следуют примерам, которые они видят в других приложениях (не обязательно в Android). Образец SkeletonApp Android имеет кнопку выхода... возможно, рудиментарный орган, в зависимости от того, сколько лет этому образцу. - person Mark Storer; 03.11.2010
comment
Я видел кнопки выхода, полезные для приложений медиаплеера. Вы хотите иметь возможность слушать музыку и просматривать свой телефон, поэтому вам нужна кнопка выхода, чтобы явно закрыть его. - person Darcy; 21.07.2011
comment
Darcy, медиаплеер, который продолжает играть даже после того, как вы нажали кнопку «Выход», ведет себя неправильно. Действие завершено, но приложение все еще запускает службу в фоновом режиме, воспроизводя для вас музыку, поэтому вообще не выходит. Сценарий, который вы описываете, является поведением по умолчанию, когда пользователь нажимает кнопку «Назад» или «Домой» или долго нажимает «Домой». Таким образом, по-прежнему нет необходимости в кнопке выхода. Протестируйте его с помощью встроенного плеера, наблюдая за списком процессов, и вы поймете, как это работает. - person Robert; 25.07.2011

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

person Docmur    schedule 02.11.2012

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

Когда вы вызываете «finish», стек приложения просто переносится на задний план. Он до сих пор существует в памяти. Android сам решает, когда закрыть приложение (то есть удалить его экземпляр из памяти), и обычно это делается, когда ваше приложение становится самым старым приложением, которое не использовалось в течение длительного времени.

person Tushar Gupta    schedule 03.11.2010

Нет, не знаешь. Ознакомьтесь с жизненным циклом активности на сайте developer.android.com.

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

person Chris Stratton    schedule 03.11.2010
comment
См. раздел «Жизненный цикл активности»: developer.android.com/reference/android/app/ Activity.html - person idbrii; 03.11.2010

Ребята, вы правы, но бывают случаи, когда кнопка «Выход» может иметь смысл. Допустим, вы храните некоторые глобальные данные для всего приложения в классе YourApplication (дочернем элементе Application), например. некоторые конфиденциальные данные или около того. Когда пользователь закрывает окончательную активность и она уничтожается, приложение не будет завершено. Как прочитать ресурс разработчика Android — разработчику не следует полагаться на метод Application.onTerminate(). Вы можете легко это проверить - даже в том случае, когда все действия закрыты. Приложение все еще живо. Всякий раз, когда экземпляр приложения жив, относительно легко получить доступ к этому объекту и собрать данные.

Я нашел 2 способа убить экземпляр класса приложения:

  1. обнулять все ссылки на объекты (что вряд ли возможно для больших проектов), а затем вызывать сборку мусора
  2. вызов

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

Таким образом, кнопка «Выход» может иметь функцию для завершения всех действий, вызова сборки мусора, а затем вызова killProcess(), что гарантирует безопасное удаление глобальных данных, хранящихся в приложении.

person Barmaley    schedule 03.11.2010
comment
Это заставляет меня плакать. (1) Было бы бессмысленно выполнять сборку мусора, а затем убивать ваш процесс, потому что его уничтожение избавит вас от всего; (2) Обнулить все ссылки на объекты?!?; (3) Какого черта в том, что легко получить доступ к данным в объекте Application; (4) Наличие некоторых действительно конфиденциальных данных в месте, к которому могут получить доступ другие, и полагаться на то, что пользователь выберет выход, чтобы данные были в безопасности, кажется довольно сомнительным. - person hackbod; 03.11.2010
comment
barmaley, процессы запускаются в своих отдельных пространствах памяти. Вы не сделаете свою систему более безопасной, убив процесс. Если вредоносный код может считывать память через границы процесса, он также может считывать освобожденную память. Обнуление всех ссылок на объекты, а затем уничтожение процесса — это не что иное, как пустая трата циклов процессора. - person Robert; 04.11.2010

Я согласен с вышеприведенным постом barmaley.

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

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

Во всяком случае, только мой 2c.

person davidcesarino    schedule 03.11.2010

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

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

Это регулярная просьба и критика в обзорах/отзывах о моем приложении. Так что может быть необходимо успокоить пользователей.

person dompardoe    schedule 20.01.2012

Я думаю, что кнопка выхода может дать пользователю уверенность в том, что ваше приложение закрыто.

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

person mkatic    schedule 07.09.2012

Когда я впервые начал программировать для Android, я подумал, что было бы неплохо вручную выйти из основной деятельности. Я обнаружил, что закрытие активности через stopSelf приводит к повреждению данных instanceState, что вызывает множество ошибок ANR при повторном открытии активности.

Документ «Жизненный цикл активности» — это информация, полученная непосредственно от разработчиков платформы Google. У каждого слова есть причина.

Учтите, что сборка мусора требует процессора. Это может показаться тривиальным, но при разработке фреймворка для мобильной платформы не попытаетесь ли вы кэшировать как можно больше в памяти на случай, если она понадобится снова, так как время процессора = батарея, а загрузка с флэш-памяти стоит дорого?

Сборщик мусора для всего приложения нетривиален. Особенно, когда активность может использоваться неоднократно. Дизайн должен был учитывать все возможные варианты использования. Кэширование имеет смысл. Система разработана по этому принципу.

Я бы сказал, что несоблюдение документа «Жизненный цикл деятельности» вызывает проблемы.

person Android Dev Dude    schedule 03.11.2010

Некоторые приложения изменяют конфигурацию устройства во время работы или потребляют много ресурсов ЦП или данных. Вы можете предоставить пользователям возможность полностью выйти из приложения.

Существуют есть подходящие варианты использования кнопки "Выход".

Например, приложение, которое я сделал, также должно управлять сетями Wi-Fi: конфигурация устройства постоянно меняется. Потрясающе, и все это, пока приложение активно используется, в этом случае пользователь ожидает, что поведение эффективно прекратится после выхода из приложения.

Таким образом, в моем приложении есть кнопка «Выход», в основном для очистки созданных им конфигураций WiFi. Я мог бы сделать кнопку Stop and Cleanup, но ни один пользователь не понял бы. Они просто хотят выключить приложение, поэтому Exit.

  • Приложение работает: Wi-Fi управляется приложением.
  • Приложение закрыто: diy/android wifi.

Прямо сейчас выбор «Выход» в моем приложении выполняет очистку, за которой следует finish(), но само приложение задерживается в фоновом режиме. Функционально нормально, но сбивает с толку пользователей. Я мог бы сделать действие-переключатель под названием «функция Wi-Fi вкл / выкл», но это не упростит ситуацию.

person Barry Staes    schedule 09.04.2014