2014-06-12 6 views
60

Tak więc poznałem najlepsze praktyki dotyczące artykułów z Androidem dotyczących wydajności pamięci.Czy "Unikanie ram zastrzyków zależności" w Przewodniku pamięci systemu Android ma zastosowanie również do Sztyletu?

http://developer.android.com/training/articles/memory.html

Mówili

zależnościami uniknąć wstrzyknięcia ramy

za pomocą ramy iniekcji zależność takich jak Guice lub RoboGuice może być atrakcyjne, ponieważ mogą one uprościć kod piszesz i zapewniają środowisko adaptacyjne, które jest przydatne do testowania i innych zmian konfiguracyjnych . Jednak te frameworki mają tendencję do wykonywania wielu operacji inicjowania procesu przez skanowanie kodu w celu uzyskania adnotacji, co może wymagać znacznej ilości kodu w pamięci RAM , nawet jeśli nie jest potrzebna. Te zmapowane strony są przydzielane do czystej pamięci, aby system Android mógł je upuścić, ale to się nie stanie, dopóki strony o numerze nie pozostaną w pamięci przez dłuższy czas.

Ale co z Dagger, które twierdzą, że są szybkie. Nie jesteś pewien, do którego mam iść?

+27

Dlaczego ta kwestia ma -6 głosów i jest oznaczony jako głównie na podstawie opinii ?? Autor jest prosty zadając pytanie, czy struktura Sztyletu pasuje w kontekście opisanym w tekście przez przewodnik programisty Androida, który jest czytelnym pytaniem (nie opartym na opiniach). –

Odpowiedz

37

To zalecenie ma wartość , a nie ma zastosowanie do wszystkich schematów wtrysku zależności.

..frameworks [które działają jak Guice] wydają się wykonać wiele inicjowania procesu przez skanując kod adnotacji, które mogą wymagają znacznych ilości kodu być odwzorowany w pamięci RAM nawet jeśli nie trzeba go ..

Tak więc, jeśli za pomocą ramy DI/IoC że nie skanowanie dla tej grupy [Run-Time] adnotacji, sugerując [nadmiernej] zastosowanie refleksji, to powód nie dotyczy. Podczas gdy Dagger używa adnotacji, są to used differently niż przez Guice i unikają wskazanego problemu.

Od Dagger został napisany jako „szybkiego zależności wtryskiwacza dla Androida i Java”, autorzy zaprojektowali go do tego celu i wierzę, że jest ona odpowiednia dla takiego celu - Śmiało, spróbować .


Dagger wykorzystuje w czasie kompilacji adnotacje (no mostly), zamiast opierania się na adnotacje czasie wykonywania i odbicia; to skanowanie i odbicie adnotacji w czasie wykonywania powoduje problem, o którym ostrzegał przewodnik pamięci.

+4

Stworzyłem [wydanie dla androidowych dokumentów] (https://code.google.com/p/android/issues/detail?id=213009&thanks=213009&ts=1465906273). zagłosuj na ten problem. – TmTron

+1

Wykałaczka jest również dobrą alternatywą dla Sztyletu, z taką samą wydajnością i wydrukiem stóp pamięci: https://github.com/stephanenicolas/toothpick – Snicolas

0

Twórca sztylet @JakeWharton, napisał również prostszy widok "wstrzykiwania" ramy nazwie Butterknife

because all the RoboGuice converts were complaining about lack of "view injection" with Dagger.

go używać tak:

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... 
    } 
} 
12

Android zespół niedawno zaktualizowany ich zalecenia suggest developers use Dagger 2.

Poprzednie zalecenie było oparte na wysokich kosztach refleksji. Odkąd Dagger 2 nie używa już odbicia - Dagger 1 zrobił - wierzą, że "" może być używany w aplikacjach na Androida bez zbędnego kosztu runtime lub zużycia pamięci ".

(Zastrzeżenie:. Jestem menadżerem zespołu Dagger 2)

+0

To jest dobra odpowiedź na pytanie –

Powiązane problemy