/ / Zachovať dáta fragmentu bez zachovania fragmentu - java, android, multithreading, android-fragmenty

Zachovať dáta Fragment bez zachovania Fragment - java, android, multithreading, android-fragmenty

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ď č. 1

Tento 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.

Komponenty uvedomujúce si životný cyklus: https://developer.android.com/topic/libraries/architecture/lifecycle

Google ViewModel: https://developer.android.com/topic/libraries/architecture/viewmodel