Pracujem na aplikácii, ktorá musí urobiť veľa výpočtov na pozadí.
Za týmto účelom začínam vlákno z fragmentu aodovzdať Handlerovi, aby mohol posielať správy späť. Ak dôjde k zmene konfigurácie (rotácia obrazovky, ...) Android znova vytvorí aktivitu a fragment. Hľadám spôsob, ako získať odkaz na vlákno z nového Fragmentu, aby som mu mohol odovzdať nový Handler.
Zachovanie celého fragmentu nie je pre mňa možnosťou, pretože používa odlišné rozloženie v režime na šírku.
Nemôžem používať onRetainNonConfigurationInstance (), pretože to je podporované iba v časti Aktivity, ale moje vlákno žije v zlomku.
Nemôžem používať onSaveInstanceState (), pretože podporuje iba primitívne typy údajov.
Existujú nejaké iné spôsoby, ako si zachovať odkaz na moje vlákno pozadia, keď sa fragment znova vytvára?
odpovede:
0 pre odpoveď č. 1Tento problém som vyriešil pomocou bezhlavého zadržaného fragmentu, ktorý riadi vlákno.
Môj normálny fragment vytvára novú inštanciu bezhlavého fragmentu, ktorý je zachovaný. Bezhlavý fragment má start()
a stop()
metódy, ktoré zase začínajú a zastavujú vlákno a setHandler()
metóda, ktorá mení správy obsluhy.
Vždy, keď sa nezachovaný fragment znovu vytvorí, musí iba získať zadržaný fragment z FragmentManager a zavolať setHandler()
s novým Handlerom.
0 pre odpoveď č. 2
Na to môžete použiť ViewModel komponentov architektúry Android.
Google ViewModel: https://developer.android.com/topic/libraries/architecture/viewmodel