Я нахожусь в « особой » ситуации с эффективностью моей программы. Сейчас я нахожусь на этапе, когда мне нужно улучшить производительность приложения и снизить расход заряда батареи .
Перед вопросом:
- Во-первых , мое приложение работает. Он работает отлично - никаких ошибок бы то ни было .
- Во-вторых , я прочитал оптимизацию срока службы батареи на веб-сайте разработчиков Android и оптимизировал мелочи, которые они просили. Никаких проблем бы то ни было .
Теперь мне любопытно узнать о специальных исправлениях других разработчиков, которые они использовали для оптимизации своих приложений. Вещи, которые пользователи могут никогда не узнать или на которые не обратят внимания. Однако исправления либо увеличат срок службы батареи, либо помогут улучшить обслуживание приложения.
Итак, каковы ваши уникальные приемы оптимизации?
Я нахожусь в особой ситуации, когда мне действительно нужны знания, и я думаю, что это будет прекрасная возможность поделиться с разработчиками знаниями о ситуации, в которой они все оказались.
Пожалуйста, голосуйте за отличные ответы, так как это побудит великих разработчиков поделиться своими знаниями.
источник
Ответы:
В какой-то момент вы дойдете до точки, когда использование известных приемов достигнет своих пределов. Лучшее, что можно сделать на этом этапе, - это профилировать свой код и посмотреть, какие области являются узкими местами, исходя из ваших конкретных требований.
Исследование использования ОЗУ с помощью MAT и Traceview : статья о том, как использовать инструменты для профилирования вашего приложения.
источник
Распределение треков и сквоша. Чем больше вы выделяете, тем чаще нужно будет запускать сборщик мусора, не позволяя вашему процессу делать что-либо еще в течение относительно длительных периодов времени, например 100 мс или около того.
Лучший инструмент, который я знаю для этого - Tracker распределения, включенный в DDMS .
Не только сборщик мусора может повлиять на взаимодействие с пользователем, но и избыточное выделение памяти, и сборщик мусора потребляют некоторые вычислительные ресурсы.
Вот пример и небольшая хитрость. В моем приложении есть часы, которые показывают текущее (аудио) время, включая десятые доли секунды. Это часто обновляется. И TextView выполняет распределения внутренние всякий раз, когда вы вызываете setText () с CharSequence. Но он ничего не выделяет с вариантом setText (char [] text, int start, int len). Это не задокументировано, и никто не ответил, когда я спросил об этом.
Таких много. И это одна из причин, почему мое приложение содержит 50% нативного кода (но есть и другие причины).
Кроме того, я могу порекомендовать вам поэкспериментировать с ProGuard . Он выполняет несколько этапов оптимизации и регистрирует такую информацию, как неиспользуемые методы в проекте, что может помочь вам удалить остатки в вашем коде.
источник
Если у вашего приложения много экранного времени, используйте черный цвет везде, где это возможно . Это снизит расход заряда батареи в худшей части устройства: экране, особенно в телефонах и планшетах AMOLED.
источник
Для приложений с несколькими действиями убедитесь, что вы не перезапускаете действия, которые просто нужно вывести на передний план, используя соответствующие флаги Intent. Убедитесь, что ваша куча находится под контролем, и что не создаются ненужные представления, привязки и контексты.
Я считаю, что лучший инструмент для демонстрации всего этого во время работы приложения:
источник
При использовании SQLlite особое внимание уделяйте индексам. Ничего не предполагайте. Я получил огромное ускорение в Zwitscher, когда я помещал индексы в столбцы, обычно используемые для поиска.
источник
Несколько советов, которые помогут вам оптимизировать приложение с точки зрения пользовательского интерфейса :
использовать
convertView
для адаптеров списков - было бы очень дорого, если бы вы создали новое представление внутри, такAdapter.getView()
как эта процедура вызывается для каждой позиции в списке. ИспользованиеconvertView
позволяет повторно использовать уже созданное представление. Хороший пример (вместе с использованиемViewHolder
) можно найти в ApiDemos .Может случиться так, что ваши макеты не полностью оптимизированы и могут быть улучшены (например, путем слияния или удаления родителей). Инструмент Layoutopt для Android найдет для вас такую ситуацию. Его можно использовать с HierarchyViewer для проверки отдельных представлений. Больше информации здесь .
удалить фоновый рисунок - у платформы Android раньше была (есть ли она?) проблема с определением того, какие представления следует рисовать. Существует вероятность, что ваш (по умолчанию) фоновый рисунок будет нарисован только для того, чтобы впоследствии быть скрытым вашим непрозрачным пользовательским интерфейсом. Чтобы избавиться от этого расточительного рисунка, просто удалите фоновый рисунок.
Это можно сделать в индивидуальном стиле
Несколько советов, которые помогут вам оптимизировать приложение с точки зрения использования батареи :
проверьте тип сети и подождите, пока пользователь не попадет в зону с Wi-Fi или 3G (а не в роуминге), и только затем разрешите ему использовать соединение
по возможности используйте gzip для текстовых данных, чтобы ускорить загрузку и синтаксический анализ
переработать сложные объекты Java, такие как
XmlPullParserFactory
/BitmapFactory
/StringBuilder
/Matcher
и т. д.Дополнительные сведения о трюках с батареей см. В разделе « Кодирование для жизни - срок службы батареи» .
источник
Над чем подумать: НЕ злоупотребляйте String, например, в огромном цикле. Это создаст множество объектов String, которые нужно собрать в сборку мусора. Пример «Плохое кодирование» будет создавать 2 строковых объекта в каждом цикле. В следующем примере будет создана только одна последняя строка и один конструктор строк. Это имеет огромное значение при оптимизации огромных циклов по скорости. Я много использовал конструктор строк при создании своего приложения Wordlist Pro для Android, и он стал действительно быстрым, когда перебирал 270000 слов в кратчайшие сроки.
Я написал более развернутый пост по этому поводу. читать здесь
источник
Я предполагаю, что использование «final» переменных везде, где это возможно, также может улучшить скорость выполнения.
источник
Оптимизируйте изображения PNG с помощью таких инструментов, как OptiPNG и PNGCrush, чтобы уменьшить размер APK- файла на несколько килобайт . Здесь также применимы советы по оптимизации изображений для веб-сайтов: используйте соответствующие форматы изображений, поиграйте со сжатием JPG, подумайте об использовании двоичных прозрачных пленок вместо 8-битных пленок и т. Д.
Если вы отправляете большой PNGs с альфа - каналом, вы можете торговать некоторый размер APK для скорости запуска и использовать отдельные JPGs для каналов RGB и A .
Если вы устанавливаете HTTP-соединения, убедитесь, что ваш HTTP-клиент использует сжатие содержимого. Если он кэширует полученные ответы HTTP, убедитесь, что он понимает и правильно использует заголовки HTTP, связанные с кешированием.
источник
Если у вас есть сетевые операции, попробуйте повторно использовать тот же экземпляр httpclient. Избегайте использования регулярных выражений.
источник
Попробуйте использовать DDMS для отслеживания всех потоков, запущенных в системе. Например, я заметил, что я использовал веб-просмотр для отображения html-контента, я заметил, что он создает несколько потоков для управления сеансом управления файлами cookie и т. Д., Что увеличивает объем моей памяти. Поэтому, если у вас нет серьезной потребности в отображении сложного HTML, попробуйте использовать обычный служебный класс «Html» в Android для отображения HTML-содержимого. Это может быть полезно для людей, отображающих Eula, поскольку eula обычно содержит текст в формате html.
Если вам нужно выполнять сетевые операции, попробуйте использовать AndroidHttpClient, если вы новичок, у него есть хорошие возможности для кэширования сеансов SSL, и все это действительно помогает улучшить вашу производительность. Всегда устанавливайте тайм-ауты подключения к сокету примерно на 60 секунд или некоторые конечные значения, потому что бесконечные тайм-ауты могут вызвать взаимоблокировки, особенно если вы разрываете соединение во время подтверждения ssl.
источник
Используйте Android Resource Tracker, чтобы найти неиспользуемые ресурсы в вашем проекте, которые можно удалить.
источник
Избегайте использования XPath, если вы можете анализировать ввод XML с помощью подпрограмм обработки строк для получения текста между тегами. Я протестировал и могу подтвердить 10-кратное улучшение в данном случае на наборе данных 50000 элементов в HTC Desire.
источник
Я знаю, что присоединюсь к этому разговору чуть позже, но было бы идеально собрать много хороших советов в одном месте, поэтому я надеюсь, что эта ветка будет жить и обновляться довольно часто. Мои советы:
..будет обновлено..
источник