Android: Диалог: скрыть или потускнеть - PullRequest
25 голосов
/ 01 апреля 2011

Я играю с Диалогом, чтобы создать несколько быстрых просмотров в моем приложении (например, имя для входа и т. Д.)

и я брожу, что лучше: спрятать или отклонить.

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

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

Так может кто-нибудь дать мне плюсы и минусы использования Hide Over Dismiss.

Jason

Ответы [ 4 ]

52 голосов
/ 25 июня 2014

Использование hide() может вызвать ошибку Leaked Window.

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

Итак, либо dismiss() ваши диалоговые окна правильно перед вызовом finish(), либо просто используйте dismiss() вместо hide().

25 голосов
/ 01 апреля 2011

Зависит от того, сколько раз вам это нужно, и стоит ли его создавать.Если создать его не так уж и дорого, я бы лично от него отказался, чтобы у него была «чистая среда».Но если вы не используете сотни диалогов, я не думаю, что это действительно имеет значение.

8 голосов
/ 29 июля 2016

Я знаю, что это очень старый пост, но я не нашел ни одного из приведенных выше достаточно хороших ответов, так что проще всего объяснить:

  • hide() просто изменит статус видимости диалогового окна, но объект все еще будет там и может быть снова показан, используя метод show().
  • dismiss() скрывает, а также уничтожает диалог. чтобы снова отобразить диалоговое окно, его необходимо сначала восстановить.

тогда, если вам нужно многократно показать и скрыть диалог, hide(). в конечном итоге dismiss() включите onDestroy(), чтобы избежать ошибки утечки окна.

надеюсь, что это будет полезно для ссылок на функции.

1 голос
/ 01 апреля 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...