Каково главное преимущество и недостаток «не держать действия» в android
Один запрос, который я хотел бы получить, если бы кто-нибудь мог ответить на него, как: Do not keep activities следует проверять параметры Do not keep activities во время тестирования мобильного приложения Android от разработчиков.
Я использовал его в своем приложении и обнаружил, что мое приложение ведет себя некорректно и разбилось, когда я включил. Do not keep activities в android.
Мои вопросы были несколько:
1: How much this option will affect mobile applications?
2: What exactly does this do?
Создает ли это какие-либо положительные или отрицательные функции в моих приложениях?
Каковы были преимущества и недостатки его использования при сохранении. Do not keep activities Просьба поделиться опытом.
Насколько этот параметр повлияет на мобильные приложения?
Если они хорошо написаны, этот вариант не повлияет на них.
Если этот параметр включен, только переменные, хранящиеся в активности с методом onSaveInstanceState будут сохранены, когда вы перейдете к другому действию или приложению в фоновом режиме. Все остальные переменные будут немедленно удалены. Когда этот параметр выключен, есть вероятность, что эта переменная будет сохранена
Нет, это означает, что все не сохраненные переменные будут удалены. Когда вы в пример нажмите кнопку «домой».
Создает ли это какие-либо положительные или отрицательные функции в моих приложениях?
Нет, это только помогает правильно разработать приложение. Это помогает прогнозировать неожиданные ситуации.
Do not Keep Activities – это просто вариант разработчика, который поможет вам проверить, не
2. Handled малого объем память Ситуация, соответствующий образ (в этом случае активность будет уничтожена). ̶
Изменить : этот параметр не эмулирует ситуации с низкой памятью. Когда устройство испытывает низкую память, система может запросить операцию «Drop», вызывая Finish (), или она может идти вперед и полностью уничтожить процесс, как говорится в комментарии.
ПРЕИМУЩЕСТВА :
НЕДОСТАТКИ :
Если пользователь неосознанно включил эту опцию, то устройство будет работать медленно, и все действия будут воссозданы во время навигации пользователя на его устройстве. Это затруднит работу пользователя
Очень хороший ответ дается в форуме разработчиков xda об использовании этой опции
Поэтому для проверки такого полного случая вы должны остановить приложение вручную, но не отбрасывайте его из диспетчера задач. Самый простой способ – с красной квадратной кнопкой в андроид-студии. И снова откройте приложение.
Преимущество «Не сохранять активность» заключается в том, что он эмулирует системную ситуацию с низкой памятью, когда она начинает убивать разные части приложения. Ваше приложение должно поддерживать эту ситуацию. Недостатком является то, что этот вариант является своего рода строгим и убивает только действия, когда нет способа подражать этому для служб
Do not keep activities
Не сохранять операции
«Не сохранять операции» — именно таким странным образом переведена фраза «Do not keep activities» в настройках Android. А описание «Удалять все операции сразу после их завершения пользователем» не добавляет ясности. Включается она в меню «Параметры разработчика» (Developer Options), находится в самом низу.
Работает эта настройка очень просто, когда она включена, все неактивные активити умирают. Т.е. после перехода из активити A в активити B, активити A уничтожается. Таким образом можно проверить насколько вписывается ваше приложение в activity lifecycle.
Почти не возникло проблем с Вконтакте, с их SDK можно написать все правильно, но все таки есть у них небольшая проблема. А именно, после авторизации через приложение, результат возвращается в onActivityResult. По документации, нужно вызвать
однако, в случае уничтожения активити нашего приложение, вылетит NPE, поэтому сначала нужно вызвать
Не совсем очевидно, да и незадокументировано. Завел issue, на всякий.
Были проблемы с Facebook, потому как, по глупости своей, я решил использовать android-simple-facebook, а ее автор, как я понял, не особо парился по поводу android lifecycle. Пришлось полностью от него отказаться и переделывать все на официальный SDK Facebook и все проблемы ушли. Хотя, наверное, можно было и так все поправить одной строчкой, но пути назад уже не было.
И совсем не было проблем с Twitter, потому что все работает просто, как топор. У них просто нет своего SDK и авторизации через приложение. Приходится делать все по старинке, через WebView. Вообще у них самая ужасная авторизация из всех.
Ну да это так, лирическое отступление.
Есть проблемы с PayPal SDK, оно просто валится везде где только можно. Благо кто-то уже завел issue до меня и наверняка они в скором будущем это поправят.
Другие примеры
У меня не много приложений на телефоне, да и смотреть их все мне, если честно, лень, но я не мог пройти мимо недавно вышедшего приложения хабра. Начнем, конечно же, с него. Ну и добавлю ошибку Payoneer, которую нашел случайно:)
Хабрахабр
Я потыкался по разным экранам и уже было расстроился, неужели все написано правильно и один лишь я делаю столько ошибок. Но нет, я таки добрался до страницы About:
Payoneer
Много времени не понадобилось. Экран логина, ушел в keepass за паролем, вернулся — гипс крэш:
Ещё есть некоторые приложения без крэшэй, но с неправильным поведением, например, не сохраняется открытый фрагмент, а вместо него, после пересоздания, снова показывается главный экран приложения.
Используйте настройку «Do not keep activities», надеюсь для кого-то эта информация окажется новой и поможет избежать ошибок поведения и крэшэй.
Думаю тоже смог бы избежать кучи репортов в Google Play, если бы сразу знал об этой настройке.
В чем главное преимущество и недостаток «не сохранять активности» в Android
Один вопрос, который я хотел бы получить, если бы кто-нибудь мог ответить на него, например: Do not keep activities параметры, которые необходимо проверить во время тестирования мобильного приложения Android от разработчиков.
Я использовал его в своем приложении и обнаружил, что мое приложение ведет себя некорректно и дает сбой при включении Do not keep activities в Android.
Моих вопросов было немного:
1: How much this option will affect mobile applications?
2: What exactly does this do?
Создает ли это положительную или отрицательную функциональность в моих приложениях?
6 ответов
Насколько эта опция повлияет на мобильные приложения?
Если они хорошо написаны, эта опция на них не повлияет.
Если этот параметр включен, только переменные, которые сохраняются в активности с помощью метода onSaveInstanceState будут сохранены, когда вы перейдете к другому действию или приложение перейдет в фоновый режим. Все остальные переменные будут немедленно удалены. Когда эта опция выключена, существует вероятность, что эта переменная будет сохранена.
Нет, это означает, что все несохраненные переменные будут удалены. Например, когда вы нажимаете кнопку «Домой».
Создает ли это положительную или отрицательную функциональность в моих приложениях?
Нет, это только помогает правильно разработать приложение. Помогает предугадывать неожиданные ситуации.
Преимущество «Не сохранять действия» заключается в том, что он имитирует ситуацию с нехваткой памяти в системе, когда она начинает убивать различные части приложения. Ваше приложение должно поддерживать эту ситуацию. Недостатком является то, что этот вариант является своего рода ограниченным и убивает только действия, когда нет возможности эмулировать это для служб.
Опция Do not keep activities рядом с Developer options позволяет разработчикам легко воспроизвести тот же сценарий.
В идеале хорошо разработанное Android-приложение должно обрабатывать onSaveInstanceState и onRestoreInstanceState сохранение и восстановление локальных переменных всех действий.
Более подробная информация представлена здесь на официальном сайте разработчиков Android.
ПРЕИМУЩЕСТВО :
НЕДОСТАТКИ :
Если пользователь неосознанно включил эту опцию, устройство будет работать медленно, и все действия будут воссозданы заново во время навигации пользователя на его устройстве. Это затруднит работу пользователя
Очень хороший ответ об использовании можно найти на форуме разработчиков xda. этого варианта
2. Handled малым объемом памяти Ситуации, соответствующим образом (в этом случае активность будут уничтожены). ̶
Activity
Activity и жизненный цикл приложения
Жизненный цикл приложения
Все приложения Android имеют строго определенный системой жизненный цикл. При запуске пользователем приложения система дает этому приложению высокий приоритет. Каждое приложение запускается в виде отдельного процесса, что позволяет системе давать одним процессам более высокой приоритет, в отличие от других. Благодаря этому, например, при работе с одними приложениями Android позволяет не блокировать входящие звонки. После прекращения работы с приложением, система освобождает все связанные ресурсы и переводит приложение в разряд низкоприоритетного и закрывает его.
После запуска activity проходит через ряд событий, которые обрабатываются системой и для обработки которых существует ряд обратных вызовов:
Схематично взаимосвязь между всеми этими обратными вызовами можно представить следующим образом
onCreate()
onStart
onResume
При вызове метода onResume activity переходит в состояние Resumed и отображается на экране устройства, и пользователь может с ней взаимодействовать. И собственно activity остается в этом состоянии, пока она не потеряет фокус, например, вследствии переключения на другую activity или просто из-за выключения экрана устройства.
onPause
onStop
В этом методе activity переходит в состояние Stopped. В этом состоянии activity полностью невидима. В методе onStop следует особождать используемые ресурсы, которые не нужны пользователю, когда он не взаимодействует с activity. Здесь также можно сохранять данные, например, в базу данных.
При этом во время состояния Stopped activity остается в памяти устройства, сохраняется состояние всех элементов интерфейса. К примеру, если в текстовое поле EditText был введен какой-то текст, то после возобновления работы activity и перехода ее в состояние Resumed мы вновь увидим в текстовом поле ранее введенный текст.
onDestroy
В целом переход между состояниями activity можно выразить следующей схемой:
Управление жизненным циклом
Мы можем управлять этими событиями жизненного цикла, переопределив соответствующие методы. Для этого возьмем из прошлой главы класс MainActivity и изменим его следующим образом:
И при запуске приложения мы сможем увидеть в окне Logcat отладочную информацию, которая определяется в методах жизненного цикла activity:
Что такое Activity и его жизненный цикл в Android
Russian (Pусский) translation by Ellen Nelson (you can also view the original English article)
Из моей предыдущей статьи вы узнали, что Intents позволяют отправлять сообщения с одного компонента Android на другой. А очень важным компонентом является Activity.
Activities являются основной частью разработки приложений для Android. И невозможно понять Activity, не понимая их жизненных циклов. В этом материале вы узнаете всё о жизненном цикле Activity.
Жизненный цикл Activity
Activity — это отдельный экран в Android. Это как окно в приложении для рабочего стола, или фрейм в программе на Java. Activity позволяет вам разместить все ваши компоненты пользовательского интерфейса или виджеты на этом экране.
Важно понимать, что у Activity есть жизненный цикл, проще говоря, это означает, что она может быть в одном из различных стадий, в зависимости от того, что происходит с приложением при действиях пользователя.
Методы жизненного цикла
Давайте поближе рассмотрим жизненный цикл Android Activity. Каждый раз, когда Activity меняет стадию, вызывается один из следующих методов жизненного цикла для класса Activity.
onCreate() : вызывается при первой инициализации Activity. Вам нужно выполнить этот метод для выполнения любой инициализации в вашей Activity.
onDestroy() : этот метод вызывается перед тем, как Activity будет завершена. Система вызывает этот метод, когда пользователь завершает Activity, или если система временно убирает процесс, содержащий Activity, для высвобождения места. С этом методом, обязательно освободите любые ресурсы, созданные вашей Activity, иначе ваше приложение будет иметь утечку памяти.
onRestart() : это вызывается, если Activity перезапускается, после того, как было остановлено.
Запуск Activity
Большинство пользовательских взаимодействий приводит к изменению действующей Activity. Поэтому приложение моно раз переключается между Activity за свой жизненный цикл.
Запуск Activity без ожидаемого результата
startActivity() используется, если недавно запущенная Activity не должна возвращать результат.
Следующий фрагмент кода показывает как начать другую Activity, используя этот метод:
Можно также выполнять действия по передачи данных от одной Activity к другой. В этом случае, ваша текущая Activity (вызывающая Activity) хочет передать данные целевой Activity. Вот когда полезны Intents. Чтобы узнать больше об использовании Intents для запуска Activity, смотрите мой предыдущий урок.
Запуск Activity на результат
startActivityForResult() используется для запуска другой Activity и ожидает получение данных в эту свежезапущенную Activity. Другими словами, используйте это если хотите получить результат от целевой Activity в вызывающую Activity, т.е. если целевая Activity собирает некую пользовательскую информацию в модальном диалоговом окне.
Пример запуска Activity
Вот пример, который показывает как работает запуск Activity
В методе onCreate() вы создадите новый экземпляр намерения (intent) чтобы запустить вторую Activity.
Вот как это должно выглядеть:
Прерывание Activity
Перед завершением Activity, будут вызваны соответствующие методы жизненного цикла.
Метод onPause() должен остановить все «слушания» и обновления интерфейса. Метод onStop() должен сохранять данные приложения. И наконец, метод onDestroy() высвободит любые ресурсы, выделенные для Activity.
Стадия экземпляра Activity
Activity нужен способ сохранить полезное состояние и пользовательские данные, которые она получила. Эти данные могут быть получены от пользователя или созданы, пока Activity не отображалась на экране.
Например, изменение ориентации устройства могут вызвать крушение Activity и её повторное создание. В этом случае, нужно убедиться, что сохранены все состояния Activity, прежде чем она распадётся и снова перезапустится. В противном случае, любые данные, которые были у вашей Activity в это время будут полностью утеряны.
Мы получше рассмотрим состояние экземпляра Activity в будущих статьях.
Заключение
После просмотра этого материла, вы хорошо поймете, как работает жизненный цикл Activity. И вы узнали, что есть два способа запуска Activity, а также получение указателей на то, как обрабатывается состояние экземпляра в жизненном цикле Activity.
Спасибо за чтение, и пока вы здесь, ознакомьтесь с некоторыми другими нашими материалами о кодировании приложений для Android.





