Multiple AsyncTask di Android

Hai All, pada kesempatan kali ini saya ingin berbagi pengalaman selama pengembangan aplikasi Android. Kasusnya gini, aplikasi ini mengalami sedikit keanehan saat me-load data dari database dan api. Saat aplikasi ini pertama kali di gunakan berjalan lancar seperti biasanya, tapi berbeda kondisi jika aplikasi dalam mode onPause (ditutupi lockscreen).

Keanehan itu terjadi ketika device Android dibiarkan 3 menit setelah di dalam mode lockscreen dan mengakses aplikasi itu kembali. PopUp loading muncul secara looping tanpa bisa dihentikan, seolah2 aplikasi seperti meload data tidak selesai-selesai. Jika dilihat dari status network ke API, aplikasi tidak hit API sama sekali. Ya, kurang lebih seperti itulah kasusnya.

Setelah di telusuri, ternyata masalah ini muncul karena di Android ada batas maximal AsyncTask jika menggunakan fungsi execute saja. Muncul lah solusi untuk menggunakan Multiple AsyncTask di Android.

Di postingan terdahulu kita juga pernah membahas tentang AsyncTask, nah pada pembahasan kali ini kita akan coba mengaitkannya dengan kasus yang terjadi “lapangan”. Inilah yang menarik tentang AsyncTask, karena jika kita tidak menyepelekannya maka bisa merusak performa dari aplikasi hingga akhirnya membebani memory.

Thread Pool

Asynctask ini menggunakan Thread Pool Pattern untuk menjalankan semua task yang berada method doInBackgroound(). Thread pool Pattern ini merupakan angka dari thread yang dibuat untuk menampilkan jumlah task aplikasi dan Biasanya terdiri dari banyak thread yang berada didalam antrian untuk setiap task yang berbeda.

Untuk versi awal Android (contohnya Donut dan dibawahnya), Multiple AsyncTask execution ini tidak ada atau tidak diperbolehkan. Jadi hanya ada satu task saja yang boleh berjalan. Tapi versi yang lebih baru muncul setelah Donut di-realase, limit-nya telah di tambah menjadi 5, jadi jika ada 5 Task maka ke 5 AsyncTask bisa berjaan secara bersamaan.

 

Batasan dari AsyncTask

Tentu selalu akan ada batasan dari berapa banyak task yang bisa berjalan secara bersamaan. Semenjak AsyncTask menggunakan thread pool executor yang memiliki angka maksimal dari thread yang bisa bekerja hanya (128) dan task yang ditunda sebanyak hanya 10. Jadi jika kita meng-execute lebih dari 138 AsyncTask, aplikasi akan mengalami error java.util.concurrent.RejectedExecutionException.

 

Delayed Queue Size

AsyncTask menggunakan Delayed Queue Size secara internal untuk menyimpan task yang sebelumnya ditunda. Default-nya, Queue tersebut berjumlah 10, dan jika kita menjalankan 15 AsyncTask secara langsung, maka 5 AsyncTask pertama akan berjalan di doInBackground(), dan sisanya akan menunggu antrian sampai thread yang sebelumnya selesai.

Nah dimulai dari Android versi 3.0, kita telah diperbolehkan untuk menggunakan custom thread pool executor dengan menggunakan method AsyncTask.executeOnExecutor(Executor, Object[]) melalui THREAD_POOL_EXECUTOR. Hal ini memperbolehkan kita untuk mengatur executor task yang kita inginkan seperti jumlah thread dan menentukan thread mana yang diinginkan berjalan secara paralel.

Video dibawah ini juga dapat melengkapi penjelasan diatas:


Baca juga :

Iklan

Good People write good comments ..

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s