[Примечание: эта статья была обновлена, потому что я использовал ужасный пример кода, и я мог не понимать некоторых вещей. Надеюсь, теперь суть статьи прояснилась]

Все мы смотрели видеоролики о производительности, такие как Jake Wharton’s или Android Perfomance Patterns (Enums are evil!). Хотя все это важно и не помешает знать, как все работает, я честно считаю, что нам следует в первую очередь сосредоточиться на больших вещах.

Было бы здорово, если бы мы знали, как Списки работают под капотом, или StringBuilders, или Enums. Но у всего есть контекст, и в большинстве случаев оптимизация этого или работа с базовыми классами Java для повышения производительности обычно не являются первыми проблемами, на которых вам следует сосредоточиться.

Да, мы можем улучшить объем используемой памяти и немного повысить производительность, если не будем использовать Enums или правильно будем использовать StringBuilders . Например, этот код показывает, что StringBuilder не всегда лучший выбор:

String aString = «одна строка» + «другая строка»;

лучше, чем это:

String aString = new StringBuilder («одна строка»). append («другая строка»);

и последний тоже лучше этого:

String aString = new StringBuilder (). append («одна строка»). append («другая строка»);

Первый не только яснее и легче читается, но и более эффективен (вы можете проверить сгенерированный байт-код с помощью javap -c MyClass).

Если вы не используете десятки Enum в своем приложении или не выполняете каких-либо сложных манипуляций с String, вы будете в порядке их использовать. Если вы выполняете серьезные вычисления, вам следует подумать о NDK, где вы можете выполнять точное управление памятью.

Теперь разработчики Android имеют тенденцию допускать некоторые типичные ошибки, такие как использование объекта Context, не понимая полностью, что существуют разные типы. Или они ссылаются на тяжелые объекты (даже на действия) из AsyncTask, из которых в конечном итоге произойдет утечка. Или они используют целые библиотеки для того, чего можно достичь с помощью нескольких строк кода. И много других вопросов. Если вы обнаружите утечку активности, могу вас заверить, что ваши перечисления и простые строки не будут иметь никакого значения.

Погрузитесь в исходный код Android и сначала узнайте, как правильно использовать действия, объекты контекста, службы, обработчики ... Они с большей вероятностью снизят производительность вашего приложения.

Помните: если корабль тонет, не беспокойтесь о том, что из кастрюли на кухне выльется кипяток. Сначала спасите корабль.

Если вы еще не используете его, сделайте себе одолжение и добавьте LeakCanary в свое приложение. Когда ваше приложение заработает и у вас не будет больших утечек, вы можете начать беспокоиться о Enums и Strings. Но обо всем по порядку.