Potrzebuję mojej aplikacji na Androida, aby zapisać stan na dysku, gdy jego aktywność zostanie umieszczona w tle lub zabity. Zasugerowano, że uruchamiam wątek, gdy wywoływana jest funkcja onPause() i wykonuję tam wszelkie kosztowne procedury I/O (patrz Saving/loading document state quickly and robustly for image editor).W jaki sposób system Android obsługuje wątki w tle po opuszczeniu działania?
W jakich sytuacjach OS zabije wątek i jak często zdarzają się takie sytuacje?
Zakładam, że będzie to wyglądać w jaki sposób działania są rozwiązywane tam, gdzie system operacyjny może dowolnie decydować o zabiciu wątku, ale w większości przypadków zrobi to tylko wtedy, gdy zasoby są bardzo ograniczone. Byłoby miło znaleźć jakąś szczegółową dokumentację tego.
Od zabawy, z pewnym kodem testowym, wątek w tle uruchomiony w onPause() będzie działać w tle na moim urządzeniu (próbowałem ładować wiele aplikacji i nie mogłem go zabić).
Dla mojej konkretnej aplikacji, piszę edytor bitmap, w którym używam wzorca polecenia i wzorca Memento, aby umożliwić cofanie i ponawianie zmian. Chciałbym, aby użytkownik mógł cofnąć/ponowić zmiany nawet na przykład użytkownik otrzymuje połączenie telefoniczne, a działanie zostaje zabite, gdy zostanie umieszczone w tle. Najlepszym rozwiązaniem, jakie mogę sobie wyobrazić, jest użycie wątku tła do ciągłego zapisywania moich poleceń i obiektów memento na dysk podczas używania aplikacji i do zakończenia zapisywania wszelkich obiektów, które pozostały w wątku tła, jeśli wywołana jest funkcja onPause. W gorszym przypadku, jeśli wątek zostanie zabity, stracę tylko trochę zmian.
Aby wyjaśnić, jeśli utworzysz wątek w procesie dołączonym do jakiejś aktywności, wątek ten zostanie zabity, gdy aktywność zostanie zabita (tj. Proces i wątek są połączone)? – memcom
@tifftuff: Działanie nie jest aplikacją. Działanie jest składnikiem aplikacji. Aplikacja może mieć wiele komponentów, w tym wiele działań, usług itp. Kiedy ostatni składnik aplikacji zostanie zniszczony (np. Użytkownik naciśnie BACK z jedynej aktywności w małej aplikacji), proces ten jest przeznaczony do recyklingu lub zakończenie. NIE WYJMUJ GWINTÓW. Jeśli uruchomisz wątek, musisz go zakończyć, ponieważ Android go nie zakończy, z wyjątkiem zakończenia procesu, który może nie wystąpić przez kilka tygodni. – CommonsWare
Dzięki. Czy masz jakieś zalecenia dotyczące tego, czy usługa byłaby bardziej odpowiednia niż wątek do tej pracy w tle? – memcom