Jak sugerowałeś, liczba wierszy jest ogromna, nie polecam używać AsyncTask
, ponieważ nie jest powiązany z cyklem życia aktywności, tj. jeśli aktywność, która ją rozpoczęła, umiera, nie oznacza to AsyncTask
również umiera, więc jeśli spróbujesz zainicjować AsyncTask i jakoś, jeśli Twoja aktywność umrze, np. obrót ekranu lub wciśnięty klawisz wstecz, po ponownym uruchomieniu innego AsyncTask
zostanie spawnowany, a nie połączony z już wykonywanym AsyncTask
. stąd powielanie tych samych operacji.
Podsumowując, polecam następujące podejście
(A)
-
Utwórz
IntentService
, to jesthandleIntent()
API jest już wykonywane w wątku roboczym, więc nie musisz się o nic martwić, a po zakończeniu wszystkich wiadomości w kolejce automatycznie umiera, więc nie martw się o wyciek jakichkolwiek zasobów. -
napisz swoją logikę do zbiorczego wstawiania wierszy, użyj narzędzia do rozpoznawania treści bulkInsert() dla tego samego. Polecam wstawianie 100 ikry na partię, możesz zaimplementować wycofywanie i sprawdzanie błędów, aby upewnić się, że wstawianie przebiega normalnie.
-
Po zakończeniu wszystkich wstawek możesz wysłać z powrotem do swojego interfejsu użytkownika za pomocą programu Handler i Messengers.
z tym wszystkim osiągniesz dwa główne wyzwania
- Nie rozłączać interfejsu użytkownika, unikając wszelkich możliwych błędów ANR
- Nawet jeśli zostanie naciśnięty klawisz Wstecz, zapewnione jest, że operacja db przebiega płynnie, ponieważ została podjęta w zadaniu w tle.