Pengenalan AsyncTask dan AsyncTaskLoader Pada Android Studio
Ada dua cara untuk melakukan pemrosesan latar belakang di Android: menggunakan
kelas AsyncTask, atau menggunakan kerangka kerja Loader, yang menyertakan kelas
AsyncTaskLoader yang menggunakan AsyncTask. Di sebagian besar situasi, Anda akan
memilih kerangka kerja Loader, namun penting untuk mengetahui cara kerja AsyncTask,
sehingga Anda bisa membuat pilihan yang bagus.
Dalam bab ini Anda akan mempelajari alasan pentingnya memproses beberapa tugas di
latar belakang, di luar thread UI. Anda akan mempelajari cara menggunakan AsyncTask,
bila tidak menggunakan AsyncTask, dan dasar-dasar penggunaan loader.
Thread UI
Bila aplikasi Android dimulai, aplikasi membuat thread utama, yang sering disebut
thread UI. Thread UI mengirimkan kejadian ke widget antarmuka pengguna (UI) yang
sesuai, dan ini merupakan tempat aplikasi Anda berinteraksi dengan komponen dari toolkit
UI Android (komponen dari paket android.widget dan android.view).
Model thread Android memiliki dua aturan:
1 . Jangan memblokir thread UI.
Thread UI perlu memberikan perhatiannya untuk menggambar UI dan menjaga aplikasi
tetap responsif terhadap masukan pengguna. Jika semuanya terjadi di thread UI, operasi
panjang seperti akses jaringan atau kueri database bisa
memblokir seluruh UI. Dari perspektif pengguna, aplikasi tersebut akan mogok. Lebih
buruk lagi, jika thread UI diblokir selama lebih dari beberapa detik (saat ini sekitar 5 detik)
pengguna akan ditampilkan dialog "application not responding" (ANR). Pengguna bisa
memutuskan untuk keluar dari aplikasi dan mencopot pemasangannya.
Untuk memastikan aplikasi Anda tidak memblokir thread UI:
➢ Selesaikan semua pekerjaan dalam waktu kurang dari 16 md untuk setiap layar UI.
➢ Jangan menjalankan tugas asinkron dan tugas lain yang berjalan lama pada thread
UI. Sebagai gantinya, implementasikan tugas pada thread latar belakang
menggunakan AsyncTask (untuk tugas singkat atau yang bisa disela) atau
AsyncTaskLoader (untuk tugas berprioritas tinggi, atau tugas yang perlu melaporkan
kembali ke pengguna atau UI).
2. Lakukan pekerjaan UI hanya pada thread UI.
Jangan menggunakan thread latar belakang untuk memanipulasi UI Anda, karena toolkit
UI Android bukan thread-safe.
AsyncTask
Gunakan kelas AsyncTask untuk mengimplementasikan tugas asinkron yang berjalan
lama di thread pekerja. (Thread pekerja adalah thread yang bukan thread utama atau
thread UI.) AsyncTask memungkinkan Anda menjalankan operasi latar belakang dan
mempublikasikan hasil di thread UI tanpa memanipulasi thread atau penangan.
Bila AsyncTask dieksekusi, maka akan melalui empat langkah:
1. onPreExecute( ) dipanggil di thread UI sebelum tugas dieksekusi. Langkah ini
biasanya digunakan untuk mempersiapkan tugas, misalnya dengan menampilkan
bilah kemajuan di UI.
2. doInBackground( Params. . . ) dipanggil pada thread latar belakang segera setelah
onPreExecute( ) selesai. Langkah ini menjalankan komputasi latar belakang,
mengembalikan hasil, dan meneruskan hasilnya ke onPostExecute( ) . Metode
doInBackground( ) juga bisa memanggil publishProgress( Progress. . . ) untuk
mempublikasikan satu atau beberapa unit kemajuan.
3. onProgressUpdate( Progress. . . ) berjalan di thread UI setelah publishProgress(
Progress. . . ) dipanggil. Gunakan onProgressUpdate( ) untuk melaporkan suatu
bentuk kemajuan ke thread UI sewaktu komputasi latar belakang dieksekusi.
Misalnya, Anda bisa menggunakannya untuk meneruskan data guna
menganimasikan bilah kemajuan atau menampilkan log di bidang teks.
4. onPostExecute( Result) berjalan di thread UI setelah komputasi latar belakang
selesai.
AsyncTaskLoader
AsyncTaskLoader adalah loader yang setara dengan AsyncTask. AsyncTaskLoader
menyediakan metode,
loadInBackground( ), yang dijalankan di thread terpisah. Hasil loadInBackground( )
secara otomatis dikirimkan ke thread UI, melalui onLoadFinished( ) LoaderManager
callback.
Penggunaan AsyncTaskLoader
Untuk mendefinisikan subkelas AsyncTaskLoader , buat kelas yang memperluas
AsyncTaskLoader<D> , dalam hal ini Dadalah tipe data yang sedang Anda muat. Misalnya,
AsyncTaskLoader ini akan memuat daftar string: public static class StringListLoader extends
AsyncTaskLoader<List<String>> {}
Berikutnya, implementasikan konstruktor yang cocok dengan implementasi super kelas:
Konstruktor menggunakan konteks aplikasi sebagai argumen dan meneruskannya ke
panggilan untuk super() . Jika loader Anda memerlukan informasi tambahan untuk
melakukan pemuatan, konstruktor bisa mengambil argumen tambahan. Dalam contoh
yang ditampilkan di bawah ini, konstruktor menggunakan sebuah istilah kueri.
public StringListLoader(Context context, String queryString) {
super(context);
mQueryString = queryString;
}
Untuk melakukan pemuatan, gunakan metode penggantian loadInBackground( ) , akibat
metode doInBackground( ) dari AsyncTask . Misalnya:
@Override
public List<String> loadInBackground() {
List<String> data = new ArrayList<String>;
//TODO: Load the data from the network or from a database
return data;
}
Praktikum
1. Jalankan IDE android studio
2. ganti script activity_main.xml
3. selanjutnya ganti script MainActivity.java
4. Buat sebuah file xml baru dengan nama network_security_config.xml di dalam folder/res/xml dan ketikkan script seperti gambar berikut :
5. Sesuaikan script AndroidManifest :
6. Hasil
Komentar
Posting Komentar