Както предложихте, броят на редовете е огромен, препоръчвам да не използвате AsyncTask
, тъй като не е свързано с жизнения ви цикъл на активността, т.е. ако дейността, която я е започнала, умира, това не означава AsyncTask
умира също, така че ако се опитате да стартирате AsyncTask и по някакъв начин ако дейността ви умре, например завъртане на екрана или натиснат клавиш назад, при рестартиране на друга AsyncTask
ще се създаде, а след това да се свърже с вече изпълняващ се AsyncTask
. следователно дублиране на същите операции.
Така че, като цяло бих препоръчал следния подход
(A)
-
Създайте
IntentService
, това еhandleIntent()
api вече се изпълнява в работна нишка, така че не е нужно да се притеснявате за нищо и след като всички съобщения в опашката му приключат, той автоматично умира, така че изобщо не се притеснявайте за изтичане на ресурси. -
напишете логиката си за групово вмъкване на редове, използвайте api за преобразуване на съдържание bulkInsert() за същото. Ще ви препоръчам вмъкване на 100 роя на партида, можете да приложите връщане назад и проверки за грешки, за да сте сигурни, че вмъкването върви нормално.
-
След като всички вмъквания приключат, можете да публикувате обратно в потребителския си интерфейс, като използвате Handler и Messenger.
с всичко това ще постигнете две големи предизвикателства
- За да не затворите потребителския си интерфейс, избягвайки всякакви възможни ANR
- Дори ако е натиснат клавишът за връщане назад, това гарантира, че db операцията протича гладко, тъй като е била заета във фоновата задача.