2017-07-03 16 views
5

Mam jedno bardzo ogólne pytanie, nie znalazłem konkretnej odpowiedzi na moje pytanie, a więc ponownie ją stawiam.Wiele czynności lub pojedyncza czynność i wiele fragmentów

chcę zdecydować pomiędzy dwoma podejściami

  1. Działania dedykowane dla różnych ekranach i zadań, aby uniknąć złożoności i zagadnień
  2. pojedynczych działań i wiele fragmentów dla różnych zadań i użytkownik może poruszać się jak aktywny gospodarstwa Fragment A użytkownik przejdzie do Fragmentu B, Fragment C, może to być transakcja tam iz powrotem.

Co chcę wiedzieć?

  1. Czy przenoszenie aktywności jest tak kosztowne dla procesora lub aby uzyskać prostotę pamięci narzutowej jest nieistotne?
  2. Fragment wiąże się z zarządzaniem cyklem życia wraz z przejściem, więc z jakim problemem może przyjść zarządzanie cyklem życia?
  3. Jak łatwo radzić sobie z transakcją fragmentów z zapisaniem stanu fragmentu?

Nie wiemy teraz, jaka ilość danych będzie dostępna dla fragmentu.

+0

ponieważ wiem, że użycie jednego fragmentu polega na tym, że można go użyć do oddzielenia kodu, dzięki czemu aktywność nie jest gigantyczna. i jest ważne dla utrzymania kodu i utrzymania go w prostocie. –

Odpowiedz

1

Moje pytanie jest takie samo, do tej pory w mojej aplikacji jest tylko jedno działanie, a reszta to fragmenty. Zgadzam się, że trudno jest utrzymać Fragment, ale użycie Fragmentu zwiększy twoją Wydajność.

Załóżmy, wziąć jeden przykład

mam 10 Działania, w każdej działalności, dzwonię Async zadanie do wykonania pewnych operacji w tle. W każdym zadaniu asynchronicznym onPostExecute() aktualizujesz swój interfejs użytkownika. Ale przed zakończeniem doInBackground() zmieniłeś działanie i to działanie jest zniszczone, ale pamiętaj, że doInBackground() jest nadal w toku, a po jego zakończeniu zostanie wywołana funkcja onPostExecute, a w onPostExecute() będziemy aktualizować interfejs użytkownika, ale działanie zostanie zniszczone, więc spowoduje to nieszczelność Twojej aplikacji. Ale jeśli utrzymujesz tylko jedno działanie, będzie ono łatwe do utrzymania.

Oczekiwanie na opinię innych osób również.

+0

dla zapobiegania wyciekowi można jednak użyć programu ładującego zadania async. i tylko z tego powodu wycieku używasz fragmentu, powinieneś też spróbować uruchomić program ładujący. są bardziej wydajne niż asynchroniczne zadanie –

+0

Podałem tylko jeden przykład, jestem też w zamieszaniu, którego można użyć. Jeśli użyjemy Fragmentów, GPU Overdraw będzie większe, ale w Aktywności, Overdraw GPU będzie mniej, jak myślę ... więc widzę, że jest wiele zalet i wad. – Shekhar

4

Cóż, to całkowicie zależy od projektu aplikacji, przepływu i jej nawigacji.

Oto niektóre zalety korzystania z pojedynczego działania, a wiele fragmentów:

  1. transakcje fragment Wydajność szybko niż tworzenie nowych działań.
  2. Szuflada nawigacji i pasek narzędzi ułatwiają zarządzanie pojedynczą aktywnością.
  3. Taki sam kontekst może być używany wszędzie.
  4. Zestaw setRetainInstance Fragmenta jest bardzo pomocny przy zarządzaniu zmianami orientacji.

z nim, oto kilka wad:

  1. aktywny staje się naprawdę brudny z dużą ilością kodu.
  2. Backpress obsługi przycisku jest uciążliwy, ponieważ tylko działanie może obsłużyć to nie Fragmenty.

Osobiście używam wielu działań z wieloma fragmentami, w których dzielę działania na podstawie modułów. W tym samym module można tworzyć fragmenty podmodułów. Z łatwością udało mi się zarządzać w różnych sytuacjach, tak jakby aplikacja została zamknięta, ponownie otwarta, w powiadomieniach, zmianach orientacji.

+0

Możemy również obsłużyć onBackPress() w Fragment. Utwórz oddzielną klasę FragmentBackHelper, która rozszerzy Fragment i zaimplementuje IOnBackPressed. Teraz utwórz oddzielną nazwę interfejsu w IOnBackPressed i użyj tego kodu. publiczny interfejs IOnBackPressed { boolean onBackPressed(); } . Teraz, gdzie chcesz obsłużyć onBackPress(), po prostu rozszerz tę klasę. "FragmentBackHelper". – Shekhar

+0

Buddy, gdzie jest metoda onBackPressed() w klasie Fragment, możesz tworzyć niestandardowe metody w Fragmentach, implementując interfejs, ale ostatecznie zostanie on uruchomiony z działania onBackPressed, prawda? – Ani

+0

Tak, przy pomocy tego możemy obsłużyć onBackPress(), prawda? Wiem, że wywoła on działanie onBackPress, ale mimo wszystko, co chcemy zrobić, możemy zrobić w onBackPress(), prawda? Pomóż mi zrozumieć, czy się mylę. – Shekhar

1

Oprócz powyższych odpowiedzi, kilka punktów, które chciałbym dodać, może pomóc w podjęciu decyzji, kiedy używać Fragmentu i kiedy używać Aktywności.

  • Jeśli obsługujesz większe ekrany, fragmenty są zdecydowanie preferowane w stosunku do działań.
  • Kiedy masz jakiś kod, który Twoim zdaniem może być wielokrotnego użytku na wielu ekranach, można użyć fragmentu, które mogą być ponownie wykorzystane w różnych miejscach
0

mały punkt, aby dodać na poparcie „pojedynczego działania wielu fragmentów ".

Czasami może być potrzebny komponent (np. Baner reklamowy), który utrzymuje się między różnymi stronami/ekranami aplikacji. Jeśli masz wiele wersji Activities, musisz odtworzyć ten komponent na każdym z Activities. Ale jeśli masz singiel Activity, po prostu dodajesz ten komponent do układu Aktywności i możesz o nim zapomnieć.

Powiązane problemy