2015-04-27 2 views
0

Я хочу знать, что за про или против, когда вы пытаетесь открыть новую активность с помощью Android и сразу же уничтожить предыдущий, позвонив в отделку.Pro и cons call finish

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

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

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

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

Как вы думаете? Лучше назвать Готово или не

ответ

1

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

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

  • Если вы хотите, чтобы пользователь, чтобы вернуться к предыдущей деятельности через НАЗАД, не называйте finish()

  • Если вы не хотите, чтобы пользователь, чтобы вернуться к предыдущей деятельности через СПИНКУ, есть множество вариантов, в зависимости от того, где вы сделать хотите, чтобы пользователь, чтобы пойти, когда пользователь нажимает НАЗАД

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

No, Android does not do this.

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

«Лучше» реализовать инструмент onTrimMemory() и уменьшить его площадь памяти по мере необходимости. Не навредите ожиданиям пользователя кнопки BACK.

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

Немногие пользователи будут «коснитесь кнопки« назад »100 раз».Они будут нажимать HOME или отображать обзорный экран (a.k.a., список недавних задач) или переходить к другому приложению другими способами.

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

  • пользователь запускает приложение, и создается свежая задача, с пользователем будет пусковой деятельности приложения, который показывает сообщения в почтовом ящике пользователя (A)

  • пользователь вводит на пункт «поиск» действие бар, воспитывающим розыскную деятельность, где они могут выполнять поиск по различным критериям (B)

  • пользователь заполняет критерии поиска и нажимает кнопку «Go!» Кнопка, которая выполняет поиск и показывает соответствие сообщений электронной почты (C)

  • пользователь нажимает на сообщения электронной почты, в результате чего на электронный рассматривающие деятельность (D)

  • пользователь нажимает на «Удалить» действие бар элемент, который необходимо удалить сообщение и вернуть пользователю ... где-то

Если вы считаете, что пользователь должен вернуться к результатам поиска (C), вы могли бы назвать finish() в D. Если, однако, вы полагаете, что пользователь должен вернуться в папку «Входящие» (A), вы должны позвонить по телефону startActivity() по адресу А с соответствующим адресом е флаги (например, Intent.FLAG_ACTIVITY_CLEAR_TASK), чтобы очистить стек назад и возвращает пользователя к А.

В итоге: сделать НЕ вызов finish(), чтобы иметь дело с кучей пространства; Внесите onTrimMemory(). Однако, если навигация вызывает finish(), а затем использовать его.

+0

Это отличное объяснение, 'finish()' очистить любую ссылку в памяти или они будут оставаться вокруг до тех пор, пока я не начну новое действие с 'Intent.FLAG_ACTIVITY_CLEAR_TASK'? Как насчет всех изображений, загруженных в изображение? Как они разгружаются и освобождаются? Должны ли они быть сделаны вручную на 'onDestory' или' onTrimMemory', это будет делать меня? – max246

+0

@ max246: «закончит() очистку любой ссылки в памяти» - это должно позволить активности в конечном итоге собирать мусор. «Должны ли они сделать ручное управление onDestory или onTrimMemory, это сделает меня?» - нет. Виджеты должны собираться с мусора после их деятельности. Если вы хотите сделать что-то проактивно, вы делаете это сами в 'onTrimMemory()'. – CommonsWare

Смежные вопросы