"Избегайте фреймворков инъекций зависимостей" в руководстве по памяти Android также применяется к Dagger?
Так что я столкнулся с этой передовой практикой на Android статей о производительности памяти.
http://developer.android.com/training/articles/memory.html
Они сказали:
избегайте фреймворков инъекций зависимостей
использование инфраструктуры внедрения зависимостей, такой как Guice или RoboGuice может будьте привлекательны, потому что они могут упростить код, который вы пишете и предоставляете адаптивная среда, которая полезна для тестирования и другие конфигурационные изменения. Однако эти рамки, как правило, выполняют много инициализации процесса путем сканирования вашего кода для аннотаций, которые может потребоваться значительное количество кода для отображения в ОЗУ даже если тебе это не нужно. Эти сопоставленные страницы выделяются в очистить память Android могут их бросить, но этого не произойдет до тех пор, пока страницы были оставлены в памяти в течение длительного периода времени.
а насчет Кинжал которые они утверждают, что быстро. Не уверен, какой из них я должен пойти?
3 ответа:
эта рекомендация делает не применяются одинаково ко всем фреймворкам внедрения зависимостей.
..фреймворки [которые работают как Guice], как правило, выполняют много инициализации процесса с помощью сканирование кода для аннотаций, который может требуется значительное количество кода для отображения в ОЗУ даже если вам это не нужно..
таким образом, при использовании структуры DI/IoC это не поиск упомянутые [run-time] аннотации, подразумевающие [чрезмерное] использование отражения, тогда эта причина не применяется. В то время как Кинжал использует аннотации это используется по-разному чем Guice1 и избежать указанной проблемы.
поскольку Кинжал был написан как " A быстро зависимость инжектор для Android и Java", авторы разработали его для этой цели и считают, что он подходит для такого цель - идти вперед, дать ему попробовать.
1 Dagger использует аннотации времени компиляции (ну,в основном) вместо того, чтобы полагаться на аннотации и отражение во время выполнения; именно сканирование и отражение аннотаций во время выполнения вызывает проблему, о которой предупреждало руководство по памяти.
команда Android недавно обновила свою рекомендацию до предложите разработчикам использовать кинжал 2.
предыдущая рекомендация была основана на высокой стоимости отражение. Поскольку Кинжал 2 больше не использует отражение-Кинжал 1 сделал - они верят в это "может использоваться в приложениях для Android без ненужных затрат времени выполнения или использования памяти".
(отказ от ответственности: я менеджер команды Dagger 2.)
создатель Кинжала, @JakeWharton, также написал более простой вид" инъекционной " структуры под названием Butterknife
потому что все новообращенные RoboGuice жаловались на отсутствие "вид инъекции" с кинжалом.
вы используете его так:
class ExampleActivity extends Activity { @InjectView(R.id.title) TextView title; @InjectView(R.id.subtitle) TextView subtitle; @InjectView(R.id.footer) TextView footer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.inject(this); // TODO Use "injected" views... } }