Przewodnik programisty dla Androida zawiera porządną sekcję dotyczącą korzystania z Fragments. Jednym ze sposobów wykorzystania Fragmentów jest brak interfejsu użytkownika. Jest kilka odniesień do używania tego jako sposobu przetwarzania w tle, ale jakie są zalety Fragments w tym obszarze? Gdzie mogę wybrać Fragment na wątki, AsyncTasks, Handlers, itp. Do przetwarzania w tle?Jaki jest przypadek użycia fragmentu bez interfejsu użytkownika?
Odpowiedz
Instancja Fragment
może przetrwać poprzez zmiany konfiguracji urządzenia (np. Obrót ekranu). Ponieważ Activity
zostanie zniszczony i odtworzony po zmianie konfiguracji, trudno zaprojektować taki, który będzie śledzić wątek lub AsyncTask
. Z drugiej strony, system zajmuje się ponownym podłączeniem utrwalonego Fragment
do właściwego Activity
na drugim końcu (że tak powiem) zmiany konfiguracji. Wciąż używasz wątku lub AsyncTask
, ale teraz Fragment
trzyma go zamiast tego.
Mogą to być inne zastosowania, ale jest jedna, którą mogę wymyślić.
Mam duży fragment dość skomplikowanego kodu, który obsługuje logowanie do różnych serwisów społecznościowych - Facebook, Google, Twitter. Jest to kod, który muszę ponownie wykorzystać w różnych działaniach, ponieważ użytkownik może logować się z różnych miejsc w aplikacji. Nie należy do podstawowej klasy aktywności, ponieważ można dziedziczyć tylko z jednej klasy i używam tego dziedziczenia dla innych, niepowiązanych funkcji.
Fragment nie zawierający ui jest idealny do mojej sytuacji, a fragment pasuje do potrzeby ładnie, ponieważ potrzebuję wywołania zwrotnego cyklu życia, na przykład (Facebook jest znany w tym względzie, potrzebujący, na przykład, naActivityResult, itp.).
Czy uzyskujesz dostęp do tej samej instancji fragmentu bez interfejsu z różnych działań lub czy każde działanie tworzy własną kopię fragmentu? Sądziłem, że ten fragment bez UI będzie dobrym sposobem na przeniesienie dużej części pobranych danych z aktywności nadrzędnej na dziecko, ale najwyraźniej każde działanie ma swój własny menedżer fragmentów i nie jest to możliwe. –
@Iwo Banas, każde działanie ma swój własny menedżer fragmentów. Jednak różni menedżerowie fragmentów po prostu dodają i wykonują ten sam fragment, kiedy muszą to zrobić. –
Zgadzam się z Greg Ennis.
Pracuję teraz nad aplikacją, która musi wykonać serię wywołań funkcji API REST. W większości przypadków są one wykonywane w ramach jednego działania. Ale użyłem tylko bezgłowego fragmentu, aby poradzić sobie z przypadkiem, w którym dwie różne czynności wymagały wykonania tej samej sekwencji wielu połączeń i oczywiście obsługiwały błędy w dowolnym miejscu sekwencji. Centralizując sekwencję w fragmencie, mogłem uniknąć duplikowania sporych ilości kodu.
Mamy kolejne wywołanie api, które zwraca wiele danych, które są teraz analizowane w wątku interfejsu użytkownika i trwają zbyt długo. W przyszłej wersji interfejsu API strony serwera będzie strona danych, a nasza aplikacja będzie wymagane, aby wykonać serię wywołań api, aby uzyskać pełne wyniki. Myślę, że byłaby to świetna aplikacja dla zatrzymanego bezgłowego fragmentu. Czynność inicjująca może rozpocząć bezgłowy fragment i sekwencję wywołania. Jeśli z pierwszego połączenia nie wystąpi żaden błąd, ta czynność może rozpocząć następną czynność, wyświetlając początkowe wyniki, podczas gdy fragment po prostu kontynuuje dłubanie i pytając serwer o następną stronę danych. Wywołania api są już wykonywane w wątku tła. Jestem prawie pewien, że zatrzymany fragment będzie musiał działać na wątku roboczym.
Nie ma więcej informacji na temat zatrzymanych fragmentów na Understanding Fragment's setRetainInstance(boolean)
te nazywane są również Headless Fragments. Możesz przeczytać więcej here
to wygląda jak odpowiedź tylko na link ... –
Tak .. Bo myślę, że już odpowiedział ... I nie mogę dodać komentarza .. –
- 1. Jaki jest przypadek użycia zimnych obserwowalnych przedmiotów?
- 2. Przypadek użycia interfejsu Google Prediction API
- 3. Jaki jest przypadek użycia dla określenia typu podstawowego w wyliczeniach?
- 4. ThreadPool.QueueUserWorkItem przypadek użycia
- 5. Android przypadek użycia SyncAdapter
- 6. Scaladoc [przypadek użycia]
- 7. Prawdziwy przypadek użycia BufferManager
- 8. iOS - Określ kraj użytkownika bez użycia CLLocationManager
- 9. Jaki jest ogólny przypadek funkcji promującej QuickCheck?
- 10. Uzyskiwanie "Fragment nie utworzył widoku" po adnotacji innego Fragmentu bez interfejsu użytkownika
- 11. Jaki jest najlepszy sposób na wdrożenie komputera stanu interfejsu użytkownika?
- 12. Co to jest przypadek użycia `pip install -e`
- 13. Uruchamianie długich zadań bez zamrożenia interfejsu użytkownika
- 14. Zapobiegaj blokowaniu interfejsu użytkownika bez dodatkowych wątków.
- 15. Oceń ciąg wielomianowy bez użycia wyrażenia regularnego i interfejsu API
- 16. Jaki jest pomysł użycia str_rot13
- 17. Jaki jest cel tego fragmentu kodu CSS?
- 18. OAuth: przypadek użycia implementacji protokołu OAuth
- 19. Jaki jest prawdziwy przypadek użycia w przypadku wymazywania według std :: unordered_ (set | map)?
- 20. Jaki jest najgorszy przypadek, gdy port epmd jest otwarty?
- 21. Jak wdrożyć projekt Angular2 bez użycia interfejsu CLI
- 22. Odłączanie fragmentu bez wyzwalania onSaveInstanceState()
- 23. Tworzenie projektanta interfejsu użytkownika
- 24. Jaki jest najbardziej przyjazny dla użytkownika najlepszy klient SVN interfejsu użytkownika dla Window 7?
- 25. Który przypadek jest lepszy?
- 26. Jaki jest typ użytkownika facebook
- 27. Globalny zasięg fragmentu użytkownika w edytorze Atom.io
- 28. Używanie interfejsu API YouTube w obrębie fragmentu
- 29. Python: czy istnieje przypadek użycia do zmiany klasy instancji?
- 30. Jaki jest główny scenariusz użycia Socket.IO
Prawdopodobnie powinno być uruchomione zadanie asynchroniczne w aplikacji '' 'app.Service''''', aby upewnić się, że zadanie synchronizacji nie zostanie ponownie przesłane podczas odtwarzania. Używamy fragmentu bez interfejsu użytkownika, aby działać jako "kontroler" zbierający wiadomości (transmisje) z innych fragmentów i modyfikujący kontrolki podrzędne. Zapewnia ładny poziom separacji bez zanieczyszczania macierzystego kodu aktywności zapewniającego przenośność i modularyzację ... jeden z wielkich zwycięstw przy użyciu '' '' Fragmentu'''. – OceanLife
Dzięki Karakuri i OceanLife, to dobra wiadomość. –
Asynktaski nie powinny być nigdy powiązane z aktywnością, od której są uruchamiane. Co się stanie, jeśli użytkownik przejdzie lub wróci podczas zadania asynchronicznego? –