PENGENALAN LANJUTAN KOMPONEN UI PART VII
PENGENALAN ASYNCTASK DAN ASYNCTASKLOADER
PADA ANDROID STUDIO
Pada materi lanjutan kali ini kita akan lebih dalam mengenal Asynctask & Asynctaskloader
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.
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.
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 publish Progress( 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.
Penggunaan AsyncTask
Di subkelas AsyncTask , sediakan tipe data untuk tiga jenis parameter.
➢ "Params" menetapkan tipe parameter yang diteruskan ke doInBackground( ) sebagai larik.
➢ "Progress" menetapkan tipe parameter yang diteruskan ke publishProgress( ) di thread latar belakang. Parameter ini selanjutnya diteruskan ke metode onProgressUpdate( ) di thread utama.
➢ "Result" menetapkan tipe parameter yang dikembalikan doInBackground( ).Parameter ini secara otomatis diteruskan ke onPostExecute( ) di thread utama.Tetapkan tipe data untuk setiap tipe parameter ini, atau gunakan Void jika tipe parameter tidak akan digunakan. Misalnya: public class MyAsyncTask extends AsyncTask <String, Void, Bitmap>{}
Dalam deklarasi kelas ini:
➢ Tipe parameter "Params" adalah String , yang berarti bahwa MyAsyncTask memerlukan satu atau beberapa string sebagai parameter di doInBackground( ), misalnya untuk digunakan di kueri.
➢ Tipe parameter "Progress" adalah Void, yang berarti bahwa MyAsyncTask tidak akan menggunakan metode publishProgress( ) atau onProgressUpdate( ).
➢ Tipe parameter "Result" adalah Bitmap. MyAsyncTask mengembalikan Bitmap di doInbackground( ), yang diteruskan ke dalam onPostExecute( ) .
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;
}
Mengimplementasikan callback
Gunakan konstruktor di callback onCreateLoader() LoaderManager , yang merupakan tempat membuat loader baru. Misalnya, callback onCreateLoader() ini menggunakan konstruktor StringListLoader yang didefinisikan di atas:
@Override
public Loader<List<String>> onCreateLoader(int id, Bundle args) {
return new StringListLoader(this, args. getString("queryString"));
}
Hasil loadInBackground() secara otomatis diteruskan ke dalam callback onLoadFinished(
) , di sinilah Anda bisa menampilkan hasil di UI. Misalnya:
public void onLoadFinished(Loader<List<String>> loader,
List<String> data) {
mAdapter. setData(data);
}
Callback onLoaderReset( ) hanya dipanggil bila loader akan dimusnahkan, sehingga seringkali Anda bisa mengosongkan onLoaderReset( ) , karena Anda tidak akan mencoba mengakses data setelah loader ini dimusnahkan. Bila Anda menggunakan AsyncTaskLoader, data Anda akan bertahan bila ada perubahan konfigurasi perangkat. Jika aktivitas Anda dmusnahkan secara permanen, loader ini akan dimusnahkan bersamanya, tanpa tugas yang menanti danmengonsumsi sumber daya sistem. Loader juga memiliki manfaat lain, misalnya loader bisa memantau perubahan sumber data dan memuat ulang data jika terjadi perubahan. Anda akan mengetahui selengkapnya tentang loader tertentu di pelajaran berikutnya.
Mari kita praktikkan ,Contoh Program AsyntaskDownload:
1. Pertama jalankan aplikasi IDE Android Studio, caranya :
a. Pilih Start → Android Studio
b. Pilih → Start a new Android Studio Project
c. Pilih → Empty Activity → Next
Lalu anda bisa melakukan pengisian seperti diatas.
2. Maka akan Tampil IDE Android Studio, setelah itu Buka dan ubah script activity_main.xml menjadi seperti gambar di bawah ini :
3. Setelah itu Buka dan ubah script MainActivity.java menjadi seperti gambar di bawah ini:
4. Buat sebuah file xml baru dengan Nama network_security_config.xml di dalam folder /res/xml :
dan ketikan kode program berikut seperti gambar di bawah ini :Demikianlah materi pada kali ini , semoga bermanfaat




Komentar
Posting Komentar