Seperti yang Anda sarankan, jumlah baris sangat banyak, saya sarankan untuk tidak menggunakan AsyncTask
, karena tidak terikat dengan siklus hidup Aktivitas Anda yaitu jika aktivitas Anda yang memulainya mati, itu tidak berarti AsyncTask
mati juga, jadi jika Anda mencoba memulai AsyncTask dan entah bagaimana jika aktivitas Anda mati misalnya rotasi layar atau tombol kembali ditekan, setelah memulai ulang AsyncTask
lain akan muncul daripada ditautkan ke yang sudah menjalankan AsyncTask
. karenanya menduplikasi operasi yang sama.
Jadi, secara keseluruhan saya akan merekomendasikan pendekatan berikut
(A)
-
Buat
IntentService
, inihandleIntent()
api sudah dijalankan di utas pekerja sehingga Anda tidak perlu khawatir tentang apa pun, dan setelah semua pesan dalam antreannya selesai, api akan mati secara otomatis, jadi tidak perlu khawatir tentang kebocoran sumber daya apa pun. -
tulis logika Anda untuk menyisipkan baris dalam jumlah besar, gunakan penyelesai konten bulkInsert() api untuk hal yang sama. Saya akan merekomendasikan memasukkan 100 roes per batch, Anda dapat menerapkan rollback dan pemeriksaan kesalahan untuk memastikan penyisipan berjalan normal.
-
Setelah semua penyisipan selesai, Anda dapat memposting kembali ke UI Anda menggunakan Handler dan Messenger.
dengan semua ini Anda akan mencapai dua tantangan besar
- Untuk tidak menutup UI Anda, menghindari kemungkinan ANR
- Bahkan jika tombol kembali ditekan, pastikan operasi db berjalan lancar seperti yang dilakukan di tugas latar belakang.