2013-07-26 18 views
31

Tworzę aplikację, w której może zaoszczędzić mi trochę czasu, aby mieć jeden układ dla kilku działań, z niektórymi widokami ustawionymi na GONE w zależności od tego, która aktywność jest używana.Czy widoki "GONE" są szkodliwe dla wydajności?

Wiem, że posiadanie dużej liczby widoków w układzie może prowadzić do niskiej wydajności. Gdybym miał działalność z dużą liczbą wyświetleń, ale duża część tych widoków miałaby zostać ZROBIANA, czy ta aktywność nadal działałaby słabo. To znaczy, czy widoki, które są ustawione na GONE przyczyniają się do pogorszenia wydajności? Jeśli tak, czy wymagają mniejszej mocy przetwarzania niż WIDOCZNE lub NIEWIDZIALNE widoki?

Dzięki!

+6

Widoki te będą nadal wymagały zawyżenia i będą zajmować pamięć, ale nie będą częścią procesu pomiaru i układu widoku widoku. – Luksprog

+0

+1 do tego, w dodatku - pomyśl o tym, modyfikujesz jego wizualny aspekt, widoczny lub niewidoczny, znika praktycznie z samej natury, po prostu nie zajmuje "fizycznej" przestrzeni na ekranie. – g00dy

+0

Czy mogę zapytać, dlaczego nie używasz różnych układów, jeśli niektóre "Działania" będą miały dużą liczbę widoków 'GONE'? – codeMagic

Odpowiedz

22

Pierwszą rzeczą jaką należy wiedzieć o zniknął vs niewidoczny:

  • View.GONE Pogląd ten jest niewidoczny i nie ponosi żadnej przestrzeni dla celów układu.
  • View.INVISIBLE Ten widok jest niewidoczny, ale nadal zajmuje miejsce na potrzeby układu.

Myślenie o wpływie na pomiar. Który z nich jest bardziej wydajny, zależy od tego, jak często zmieniasz widoczność widoku.

Na przykład, jeśli widok nie jest widoczna dla większości czasu, co GONE będzie prawdopodobnie bardziej efektywne, ponieważ system nie będzie niepotrzebnie pomiaru i układanie swoją niewidzialną widok ilekroć musi dostosuj inne widoki na ekranie. Z drugiej strony, jeśli widok często zmienia się z widocznego na niewidoczny , możesz uzyskać lepszą wydajność od INVISIBLE, ponieważ może potencjalnie uniknąć dodatkowej miary/układu przy każdym przejściu.

9

Here is an interesting answer. Zastanawiam się, tak samo jak ty, i odpowiedź brzmi, że View.GONE zużywa więcej pamięci niż po prostu wywołanie removeView(view) w widoku. Jednak widoki GONE zużywają mniej pamięci niż View.VISIBLE, ponieważ nie trzeba ich narysować.

Kwoty pamięci porównać tak:

View.VISIBLE>View.GONE>removing the view from the container

Co mogę zrobić, to użyć View.GONE na widoki, które nie zużywają dużo pamięci (jak TextView) i używać parent.removeView(view) na widoki, które są dużo pamięci (jak WebView);

+0

Co powiesz na wyczyszczenie pamięci z widoku 'View' i użycie' View.GONE'? W przypadku 'WebView' przestań wyświetlać w nim kod HTML lub' ImageView', usuwając obraz. –

+1

Nie jestem tego pewien. – anthonycr