Все о функциях разработчика в вашем телефоне
Константин Иванов
Настройки, которые используются для отладки и для разработки приложений, спрятаны в вашем телефоне – спрятаны в прямом смысле слова. Многие из нас идут в соответствующий раздел меню, чтобы запустить отладку USB или переключиться к рабочему модулю ART, но кроме этого, здесь имеется целый список настроек. Большая часть никогда вам не понадобится, но разве не интересно узнать, что скрывается в недрах вашего устройства?
«Разблокируем» функции разработчика в телефоне
Как говорилось выше, эти функции изначально скрыты. Это имеет смысл, поскольку найти их просто, а большинству людей они попросту не нужны. Для того, чтобы добраться до них, идем в раздел «Об устройстве» и ищем там пункт «Номер сборки». После пяти быстрых тапов появляется диалоговое окно – теперь устройство считает вас разработчиком. Только попробуйте ничего не испортить, ладно? Ну, или делайте что хотите – тоже вариант. Так или иначе, возможность заставить ваш телефон перестать работать всегда имеется.
А теперь посмотрим на предложенные функции повнимательнее.
Настройки
- Создать отчет об ошибках. Тапаете здесь, чтобы отправить соответствующее сообщение туда, куда вы хотите. Устройство готовит нужные файлы для отправки, что занимает пару минут, после чего вы видите уведомление. Если смахнуть его, процесс остановится, а если тапнуть, сообщение отправится.
- Пароль резервного копирования. Позволяет использовать ADB для создания бэкапа и восстановления приложений и связанных с ними данных на вашем компьютере. Резервное копирование данных требует введения пароля, и без него данные не могут быть восстановлены.
- Активный режим. Выбор этого пункта позволяет вам держать экран работающим постоянно при подключении телефона кабелем к зарядному устройству или к компьютеру по USB. Не стоит использовать этот пункт без надобности, поскольку это верный способ выжечь экран.
- Выбор рабочего модуля. Именно здесь вы можете выбрать между Dalvik и ART. Последний по-прежнему находится в тестовом режиме – это явно не то, что мы увидим в Android L. С некоторыми телефонами у него настоящий антагонизм, поэтому стоит уточнить на соответствующем форуме насчет вашей модели устройства.
- Включить журнал трансляции операций HCI Bluetooth. Иногда разработчику или специалисту по безопасности требуется перехватить и проанализировать пакеты Bluetooth HCI. Включение этого пункта помещает их в файл, который находится во встроенной памяти устройства (/sdcard/btsnoop_hci.log) для восстановления. После этого их можно проанализировать программой типа Wireshark.
- Статистика процессов. Все, что вам может понадобиться узнать о запущенных на вашем устройстве процессах. Тапаете здесь, а потом на одном из пунктов. Для обычного пользователя это просто набор цифр, но для разработчика может быть весьма полезным.
- Отладка USB. То, что позволяет вашему телефону связываться с компьютером, используя Android Debug Bridge (ADB). Это требуется для использования DDMS или команд ADB.
- Отозвать авторизацию отладки USB. Когда отладка при помощи компьютера происходит в первый раз, вам нужно авторизовать его и установить пару ключей. Эта настройка отменяет данное действие и предлагает повторить его снова.
- Отчеты об ошибках. Включает опцию, которая становится видимой, когда вы зажимаете кнопку питания для сбора и отправки отчета об ошибках. Очень удобно, если вы что-то тестируете.
- Фиктивные местоположения. Эта настройка позволяет вам вручную задавать информацию о местоположении, заставляя ваш телефон думать, что он там, где его в действительности нет. Кроме читов для Forsquare, это полезно для приложений, которые используют информацию о местоположении.
- Приложение для отладки. Эта настройка позволяет вам выбрать приложение для отладки. Вам не требуется действительно подключаться к отладчику, но если вы включите его, то не будете получать сообщений об ошибках, когда останавливаетесь на точке останова. Если вы не понимаете, что это значит, тогда эта настройка вам никогда не требовалась и не понадобится. Она создана для работы со средствами разработчика, позволяющими убедиться в том, что приложение работает корректно.
- Подождите, пока отладчик. Этот пункт остается неактивным, пока вы не выберет приложение для отладки. Когда оно установлено и выбрано, то настройка просто не позволяет выбранному приложению запуститься до тех пор, пока не включится отладчик. Еще один пункт, который нужен разработчикам, но бесполезен для большинства пользователей.
- Проверять для USB. Позволяет Google сканировать приложения, которые вы поставили через ADB, на предмет вредоносного поведения. Хорошая вещь.
- Показывать касания. Выбирая этот пункт, вы будете видеть визуальный эффект, подтверждающий регистрацию касания экрана.
- Местоположение указателя. Эта настройка размещает в верхней части экрана строку, в которой выводятся координаты точки экрана, которой коснулись последней.
- Показать обновления экрана. Заставляет край «окна» вспыхивать, когда происходит обновление контекста. Раздражает безумно.
- Показывать границы макета. Отмечает края элементов в окне диалога для того, чтобы вы знали, куда нужно нажать, чтобы активировать его. Попробуйте – и немедленно выключайте.
- Написание справа налево. Изменяет ориентацию экрана для поддержки языков с правосторонним написанием
- Анимация окна: масштаб. Устанавливает скорость воспроизведения анимации окна. Чем меньше число, тем быстрее.
- Анимация перехода: масштаб. Устанавливает скорость воспроизведения анимации при переходе. Опять же, чем меньше, тем быстрее.
- Эмуляция дополнительных дисплеев. Эта настройка позволяет разработчикам имитировать различные размеры экрана. Не самая надежная вещь.
- Рендеринг принудительно. Заставляет приложения использовать аппаратный двухмерный рендеринг, если они были написаны так, чтобы не использовать его по умолчанию. Иногда творит чудеса. Иногда отправляет все к чертям. Будьте бдительны.
- Показать обновления окна. С этой настройкой любая отрисовка, производимая графической подсистемой, получает красную подсветку.
- Показывать аппаратные обновления. Выделяет аппаратные уровни зеленым при обновлении. Зачем это нужно — можете почитать здесь http://www.curious-creature.org/2013/09/13/optimizing-hardware-layers/ (на английском).
- Отладка наложения. Наложение происходит каждый раз, когда приложение запрашивает систему на отрисовку чего-либо поверх чего-то иного. Эта настройка позволяет вам видеть, когда и где это происходит, чтобы видеть, в чем проблема.
- Включить 4х MSAA. Эта настройка принудительно включает множественную выборку сглаживания (MSAA). Как и с любым другим графическим ускорителем, чем больше сглаживания, тем лучше все смотрится. Но скорость работы при этом падает.
- Строгий режим. Эта настройка заставляет экран мигать, когда приложение использует главный поток для выполнения длительной и интенсивной операции.
- Выводить использование ЦП. Размещает в правом верхнем углу небольшое окно с информацией о центральном процессоре и его использовании. Забавная игрушка.
- Профиль обработки GPU. Эта настройка может либо рисовать график на экране, либо писать его в файл. График — визуальное отображение загрузки работы графического адаптера. Еще одна вещь, на которую интересно посмотреть.
- Включить трассеровку OpenGL. Настройка, позволяющая следить за ошибками OpenGL и помещающая их в специальный файл лога по вашему выбору. Ничего такого, что стоило бы трогать большинству пользователей.
- Не сохранять операции. Эта настройка уничтожает любое приложение, как только вы закрываете его окно. Ничего хорошего из этого не выйдет, что бы там на форумах ни писали.
- Фоновые процессы. Позволяет задавать в настройках количество процессов, которые могут одновременно работать в фоне. Еще одна вещь, которую большинству из нас не стоит трогать слишком часто. Если вообще стоит.
- Показать все ANR. Эта настройка заставляет все процессы показать сообщение «Приложение не отвечает», если приложение зависло, включает фоновые процессы, которые не запускаются пользователем. Полезно, если одно приложение мешает нормально работать другому.
Понятно, что большинству пользователей все эти настройки ни на что не сдались. Кроме того, лезть туда и нажимать на пункты меню ради самого процесса — не лучшая идея. Но всегда стоит знать, что вообще можно сделать, хотя бы и просто для того, чтобы не делать этого никогда.
Надеемся, что наш рассказ просветил вас немного по вопросу этих настроек и опций, записанных непонятными словами. Кстати, в зависимости от выбранного языка системы, производителя и версии ОС Android, набор пунктов может несколько отличаться разделами и их названиями.
Источник
Do not keep activities
Не сохранять операции
«Не сохранять операции» — именно таким странным образом переведена фраза «Do not keep activities» в настройках Android. А описание «Удалять все операции сразу после их завершения пользователем» не добавляет ясности. Включается она в меню «Параметры разработчика» (Developer Options), находится в самом низу.
Работает эта настройка очень просто, когда она включена, все неактивные активити умирают. Т.е. после перехода из активити A в активити B, активити A уничтожается. Таким образом можно проверить насколько вписывается ваше приложение в activity lifecycle.
Не хочется вдаваться в подробности lifecycle, но, в двух словах, система убивает фоновую активити когда захочет. В реальности это происходит не так редко, так что не стоит этим пренебрегать. Например, вам кто-то позвонил. Во время вашего разговора система может убить активити приложения, которым вы только что пользовались.
Или, самый простой способ убить активити — повернуть экран (если не android:configChanges=«keyboardHidden|orientation|screenSize»). Но не все приложения поддерживают поворот экрана. Да и те, которые поддерживают, встречаются с ошибками lifecycle на этапе разбработки, так что у них как раз проблем и не должно быть. Второй простой способ — сменить язык устройства.
Ну и разумеется можно просто включить «Do not keep activities».
Я потратил несколько дней на исправление ошибок, после того как прошелся по своему приложению с «Do not keep activities». Теперь, думаю, стоит всегда включать эту настройку на время разработки. Главной моей проблемой было корректное подключение социальных сетей в приложении.
Почти не возникло проблем с Вконтакте, с их 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?
Это похоже на убийцу приложений, я заметил в параметрах разработчика поле с надписью Не сохранять действия — destroy every activity as soon as the user leaves it .
Создает ли это положительную или отрицательную функциональность в моих приложениях?
Означает ли это, что если я открываю приложение и как только выхожу из него, оно фактически закрывает это приложение, и я не увижу его в диспетчере задач, чтобы вручную убить его? Если да, то разве это не хорошая вещь для снижения использования ОЗУ?
Каковы были преимущества и недостатки его использования при сохранении Do not keep activities , пожалуйста, поделитесь своим опытом.
6 ответов
Насколько эта опция повлияет на мобильные приложения?
Если они хорошо написаны, эта опция на них не повлияет.
Если этот параметр включен, только переменные, которые сохраняются в активности с помощью метода onSaveInstanceState будут сохранены, когда вы перейдете к другому действию или приложение перейдет в фоновый режим. Все остальные переменные будут немедленно удалены. Когда эта опция выключена, существует вероятность, что эта переменная будет сохранена.
Означает ли это, что если я открываю приложение и как только выхожу из него, оно фактически закрывает это приложение, и я не увижу его в диспетчере задач, чтобы вручную убить его?
Нет, это означает, что все несохраненные переменные будут удалены. Например, когда вы нажимаете кнопку «Домой».
Создает ли это положительную или отрицательную функциональность в моих приложениях?
Нет, это только помогает правильно разработать приложение. Помогает предугадывать неожиданные ситуации.
Преимущество «Не сохранять действия» заключается в том, что он имитирует ситуацию с нехваткой памяти в системе, когда она начинает убивать различные части приложения. Ваше приложение должно поддерживать эту ситуацию. Недостатком является то, что этот вариант является своего рода ограниченным и убивает только действия, когда нет возможности эмулировать это для служб.
ОС Android имеет это свойство, чтобы стирать действия, выполняющиеся в фоновом режиме, если на устройстве мало памяти , отдавая приоритет только тем действиям, которые выполняются наверху.
Опция Do not keep activities рядом с Developer options позволяет разработчикам легко воспроизвести тот же сценарий.
В идеале хорошо разработанное Android-приложение должно обрабатывать onSaveInstanceState и onRestoreInstanceState сохранение и восстановление локальных переменных всех действий.
Более подробная информация представлена здесь на официальном сайте разработчиков Android.
В дополнение к приведенным выше ответам есть еще один, не видимый с первого взгляда недостаток , заключающийся в том, что вы можете проверить только активность , уничтожая / воссоздавая проблемы с этой опцией, но не весь процесс восстановление приложения из-за нехватки памяти или других системных условий, потому что все не зависит от активности памяти.
Представьте, что у вас есть синглтон , от которого зависят ваши классы. После того, как система убьет приложение, ваши синглтоны также будут очищены и восстановлены с начальным состоянием, если вы не реализовали его восстановление самостоятельно. Таким образом, несмотря на то, что ваше состояние просмотра активности и поля будут восстановлены, если onSaveInstanceState и onRestoreInstanceState были реализованы правильно, это не гарантирует правильного поведения приложения после восстановления, даже на конкретном экране. Это следует учитывать
Поэтому, чтобы полностью протестировать такой случай, вы должны остановить приложение вручную, но не бросать его из диспетчера задач. Самый простой способ — с помощью кнопки остановки красного квадрата в студии Android. И снова откройте приложение.
ПРЕИМУЩЕСТВО :
Разработчик может проверить ненормальное поведение своего приложения и исправить случаи low memory — framework kills the application
НЕДОСТАТКИ :
Если пользователь неосознанно включил эту опцию, устройство будет работать медленно, и все действия будут воссозданы заново во время навигации пользователя на его устройстве. Это затруднит работу пользователя
Очень хороший ответ об использовании можно найти на форуме разработчиков xda. этого варианта
Не сохранять действия — это исключительно вариант разработчика, который поможет вам проверить,
- Вы сохранили состояние действия до того, как оно перейдет в фоновый режим.
2. Handled малым объемом памяти Ситуации, соответствующим образом (в этом случае активность будут уничтожены). ̶
Изменить : этот параметр не имитирует ситуации с нехваткой памяти. Когда на устройстве не хватает памяти, система может запросить операцию Drop, вызвав Finish (), или она может продолжить и полностью убить процесс, как говорится в комментарии.
С включенной опцией по-прежнему хорошо разрабатывать. Вам нужно будет правильно запрограммировать методы onSaveInstanceState() и onRestoreInstanceState() . Таким образом, даже если процесс будет остановлен, когда пользователь вернется к этому действию, onCreate () будет вызываться с сохраненнымInstanceState, который был сохранен в методе onSaveInstanceState(Bundle) .
Источник