2014-01-20 4 views
20

Один запрос, который я хотел бы иметь, если бы кто-нибудь мог ответить на него так: Do not keep activities параметры, которые нужно проверить во время тестирования мобильного приложения Android от разработчиков.Каково главное преимущество и недостаток «не держать действия» в android

Я использовал его в своем приложении и обнаружил, что мое приложение ведет себя неуместно и разбилось, когда я включил Do not keep activities в android.

Мои вопросы были немногочисленны:

1: How much this option will affect mobile applications?

2: What exactly does this do?

Это звучит как приложение убийцы, я замечаю в параметрах разработчика есть окно, которое говорит Не сохранять действия -destroy every activity as soon as the user leaves it ,

Создает ли это какие-либо положительные или отрицательные функциональные возможности в моих приложениях?

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

Каковы были преимущества и недостатки его использования при сохранении Do not keep activities, пожалуйста, поделитесь опытом с ним.

ответ

11

Насколько этот параметр повлияет на мобильные приложения?

Если они хорошо написаны, этот вариант не повлияет на них.

Что именно это делает?

Если у вас есть эта опция включена только переменные хранятся в деятельности методом onSaveInstanceState будут сохранены при переходе на другой вид деятельности или приложение идет в фоновом режиме. Все остальные переменные будут немедленно удалены. Когда эта опция выключена, есть вероятность того, что эти переменные будут сохранены

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

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

Создает ли это какие-либо положительные или отрицательные функциональные возможности в моих приложениях?

Нет, это только помогает правильно разработать приложение. Это помогает прогнозировать непредвиденные ситуации.

+3

Не совсем. Когда это разрешено, 'finish()' вызывается в 'Activity', когда этот' Activity' больше не находится на переднем плане. Он явно не перезагружает/не удаляет какие-либо переменные. –

+1

Я согласен с Дэвидом Вассером. Я запускаю KitKat 4.4.2 на Nexus 5 и обнаружил, что с этим параметром активировано действие, которое на самом деле нажимает onStop() или onDestroy(), когда оно задано, при возврате на передний план onCreate() не является обязательно удаленные и переменные-члены, которые не были сохранены, все еще сохраняют свое первоначальное значение. Я считаю, что это связано с тем, что система фактически не уничтожала активность, даже если она имела возможность (нехватка памяти, которая заставляла систему фактически удалять объект из памяти). – neonDion

-1

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

+4

Не совсем. В реальных условиях с низкой памятью Android просто уничтожит этот процесс. Он не будет называть 'finish()' в существующих действиях и не выборочно убивать действия. –

+0

«Не выполнять действия» не будет просто называть финиш().Он будет эмулировать системное убийство, что означает, что когда вы вернетесь к своей активности, он будет вызывать onCreate() с savedInstance, у которого могут быть некоторые сохраненные параметры, все фрагменты, которые имеют setRetainInstance (true), будут восстанавливать своих членов класса. Теперь почему каждое действие - вы не знаете, где пользователь может оставить ваше приложение для телефонного звонка или электронной почты, поэтому вам нужно проверить их все. – Androider

+3

Нет, это не «эмулирует системное убийство». Чтобы «подражать системному убийству», он должен был бы убить процесс, который этот параметр ** не делает **. В реальных условиях низкой памяти Android не выборочно убивает действия, а просто убивает процесс. Есть разница, и разница значительна. –

2

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

  1. Вы сохранили состояние активности, прежде чем он идет фон.

2. Handled малый объем память СИТУАЦИИ НАДЛЕЖАЩАЯ (в этом случае Активность будет уничтожены). ̶

Edit: Эта опция не эмулирует нехватку памяти. Когда устройство испытывает небольшую память, система может попросить операцию Drop, вызывая Finish(), или она может идти вперед и полностью уничтожить процесс, как говорится в комментарии.

По-прежнему полезно разрабатывать с включенной опцией. Вам необходимо будет правильно закодировать методы onSaveInstanceState() и onRestoreInstanceState(). Делая это, даже если процесс будет убит, когда пользователь перейдет к этой операции, onCreate() будет вызываться с сохраненнымInstanceState, который был сохранен в методе onSaveInstanceState(Bundle).

+6

Комментарий к вашему второму пункту: Не совсем. В реальных условиях с низкой памятью Android просто уничтожит этот процесс. Он не будет называть 'finish()' в существующих действиях и не выборочно убивать действия. –

1

ПРЕИМУЩЕСТВО:

Разработчик может проверить ненормальное поведение их применения и устранить случаи low memory - framework kills the application

невыгодное положение:

Если пользователь неосознанно включил эту опцию, то устройство будет работать медленно, и все действия будут воссозданы через навигацию пользователя на его устройстве. Это будет мешать пользователю работу

Очень хороший ответ дается в xda developer forum об использовании этой опции

0

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

Представьте, что у вас есть singleton, на котором зависят ваши классы. После того, как система убила приложение, ваши синглеты будут также очищены и восстановлены с начальным состоянием, если вы не внедрили его восстановление самостоятельно. Таким образом, несмотря на ваше состояние активности, состояние & поля будут восстановлены в случае, если onSaveInstanceState & onRestoreInstanceState был реализован правильно, это не гарантирует правильное поведение приложения после восстановления даже на конкретном экране. Это следует учитывать

Итак, чтобы протестировать такой полноразмерный случай, вы должны остановить приложение вручную, но не отбрасывайте его из диспетчера задач. Самый простой способ - с красной квадратной кнопкой в ​​андроид-студии. И снова откройте приложение.

See more

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