Dasar-Dasar Developer Android
Tugas Latar
Belakang
Pelajaran 7
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 1
Fundamentals nCommercial 4.0 International Lic
7.1 AsyncTask
&
AsyncTaskLoader
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 2
Fundamentals nCommercial 4.0 International Lic
Isi
● Thread
● AsyncTask
● Loader
● AsyncTaskLoader
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 3
Fundamentals nCommercial 4.0 International Lic
Thread
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 4
Fundamentals nCommercial 4.0 International Lic
Thread utama
● Jalur independen eksekusi dalam program yang
berjalan
● Kode dieksekusi baris per baris
● Aplikasi yang berjalan pada thread Java disebut
"main" atau "UI thread"
● Menggambar UI pada layar
● Merespons tindakan pengguna dengan menangani
kejadian UI AsyncTask
This work is licensed under a
Android Developer Creative Commons Attribution-No
nCommercial 4.0 International Lic
5
Fundamentals
Thread Utama harus cepat
● Perangkat keras memperbarui layar setiap 16
milidetik
● Thread UI memiliki waktu 16 milidetik untuk
melakukan semua tugasnya
● Jika terlalu lama, aplikasiTUNGGU
akan stutter atau hang
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 6
Fundamentals nCommercial 4.0 International Lic
Pengguna mencopot pemasangan
aplikasi yang tidak responsif
● Jika UI menunggu terlalu
lama untuk sebuah operasi
diselesaikan, UI akan
menjadi tidak responsif
● Kerangka kerja akan
menampilkan dialog
Application Not Responding
(ANR)
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 7
Fundamentals nCommercial 4.0 International Lic
Apa yang dimaksud dengan tugas
yang berjalan lama?
● Operasi jaringan
● Penghitungan lama
● Mengunduh/mengunggah file
● Memproses gambar
● Memuat data
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 8
Fundamentals nCommercial 4.0 International Lic
Thread latar belakang
Mengeksekusi tugas yang berjalan lama di thread latar
belakang
Thread Utama (Thread UI)
Memperbaru
i UI
● AsyncTask
● Loader Framework Melakukan
● Layanan Thread Pekerjabeberapa
pekerjaan
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 9
Fundamentals nCommercial 4.0 International Lic
Dua aturan untuk thread
Android
● Jangan blokir thread UI
○ Selesaikan semua pekerjaan dalam waktu kurang dari 16
ms untuk setiap layar
○ Jalankan pekerjaan non-UI yang lambat pada thread non-
UI
● Jangan mengakses toolkit Android UI dari luar
thread UI
○ Lakukan pekerjaan UI hanya pada thread UI
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 10
Fundamentals nCommercial 4.0 International Lic
AsyncTask
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 11
Fundamentals nCommercial 4.0 International Lic
Apa yang dimaksud dengan
AsyncTask?
Gunakan AsyncTask untuk mengimplementasikan
tugas latar belakang dasar
Thread Utama (Thread UI)
onPostExecute()
Thread Pekerja
doInBackground()
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 12
Fundamentals nCommercial 4.0 International Lic
Menggantikan dua metode
● doInBackground()—berjalan di thread latar
belakang
○ Semua pekerjaan terjadi di latar belakang
● onPostExecute()—berjalan di thread utama ketika
pekerjaan dilakukan
○ Memproses hasil
○ Mempublikasikan hasil ke UI
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 13
Fundamentals nCommercial 4.0 International Lic
Metode helper AsyncTask
● onPreExecute()
○ Berjalan pada thread utama
○ Menyiapkan tugas
● onProgressUpdate()
○ Berjalan pada thread utama
○ menerima panggilan dari publishProgress() dari thread
latar belakang
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 14
Fundamentals nCommercial 4.0 International Lic
Metode helper AsyncTask
Thread Utama (Thread UI)
onPreExecute() onProgressUpdate onPostExecute()
()
Thread Pekerja publishProgress(
)
doInBackground()
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 15
Fundamentals nCommercial 4.0 International Lic
Membuat AsyncTask
1. Subkelas AsyncTask
2. Menyediakan tipe data yang dikirim ke
doInBackground()
3. Menyediakan tipe data unit kemajuan bagi
onProgressUpdate()
4. Menyediakan tipe data hasil untuk onPostExecute()
private class MyAsyncTask
extends AsyncTask<URL, Integer, Bitmap> This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 16
Fundamentals nCommercial 4.0 International Lic
Definisi kelas MyAsyncTask
private class MyAsyncTask
extends AsyncTask<String, Integer, Bitmap>
{...}
doInBackground()
onProgressUpdate
doInBackground()
() onPostExecute()
doInBackground(
● String—bisa query, URI untuk nama file
● Integer—persentase yang diselesaikan, langkah yang
dilakukan
● Bitmap—gambar yang akan
Android Developer ditampilkan
AsyncTask
This work is licensed under a
17
Creative Commons Attribution-No
nCommercial 4.0 International Lic
Fundamentals
onPreExecute()
protected void onPreExecute() {
// display a progress bar
// show a toast
}
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 18
Fundamentals nCommercial 4.0 International Lic
doInBackground()
protected Bitmap doInBackground(String... query) {
// Get the bitmap
return bitmap;
}
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 19
Fundamentals nCommercial 4.0 International Lic
onProgressUpdate()
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 20
Fundamentals nCommercial 4.0 International Lic
onPostExecute()
protected void onPostExecute(Bitmap result) {
// Do something with the bitmap
}
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 21
Fundamentals nCommercial 4.0 International Lic
Memulai pekerjaan latar
belakang
public void loadImage (View view) {
String query = [Link]().toString();
new MyAsyncTask(query).execute();
}
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 22
Fundamentals nCommercial 4.0 International Lic
Keterbatasan AsyncTask
● Ketika konfigurasi perangkat berubah, Aktivitas
akan dimusnahkan
● AsyncTask tidak dapat terhubung ke Aktivitas lagi
● AsyncTask yang baru dibuat setiap terjadi
perubahan konfigurasi
● AsyncTasks yang lama tetap ada disitu
● Aplikasi mungkin kehabisan memori atau mogok
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 23
Fundamentals nCommercial 4.0 International Lic
Kapan harus menggunakan
AsyncTask
● Tugas pendek atau yang bisa diinterupsi
● Tugas-tugas yang tidak perlu melapor kembali ke
UI atau pengguna
● Tugas dengan prioritas lebih rendah yang bisa
ditinggalkan sebelum selesai
● Gunakan AsyncTaskLoader untuk keadaan lainnya
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 24
Fundamentals nCommercial 4.0 International Lic
Loader
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 25
Fundamentals nCommercial 4.0 International Lic
Apa yang dimaksud dengan
Loader?
● Menyediakan pemuatan data asinkron
● Menghubungkan kembali ke Aktivitas setelah
melakukan perubahan konfigurasi
● Bisa memantau perubahan sumber data dan
memberikan data baru
● Callback diimplementasikan dalam Aktivitas
● Banyak tipe loader yang tersedia
○ AsyncTaskLoader, CursorLoader
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 26
Fundamentals nCommercial 4.0 International Lic
Mengapa menggunakan loader?
● Menjalankan tugas OFF thread UI
● LoaderManager menangani perubahan konfigurasi
untuk Anda
● Secara efisien diimplementasikan oleh kerangka
kerja
● Pengguna tidak perlu menunggu data dimuat
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 27
Fundamentals nCommercial 4.0 International Lic
Apa yang dimaksud
Anatomi Loader dengan
LoaderManager?
Mengelola fungsi loader melalui callback
Bisa mengelola beberapa loader
loader untuk data database, untuk data AsyncTask, untuk data
internet...
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 28
Fundamentals nCommercial 4.0 International Lic
Mendapatkan loader dengan
initLoader()
● Membuat dan memulai loader, atau menggunakan
kembali loader yang sudah ada, termasuk datanya
● Gunakan restartLoader() untuk menghapus data di
loader yang sudah ada
getLoaderManager().initLoader(Id, args, callback);
getLoaderManager().initLoader(0, null, this);
getSupportLoaderManager().initLoader(0, null, this);
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 29
Fundamentals nCommercial 4.0 International Lic
Mengimpleme
ntasikan
AsyncTaskLoa
der
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 30
Fundamentals nCommercial 4.0 International Lic
Ringkasan AsyncTaskLoader
AsyncTaskLoader AsyncTask WorkToDo
LoaderManager
Meminta Menerima
Pekerjaan Hasil
Aktivitas
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 31
Fundamentals nCommercial 4.0 International Lic
AsyncTask
AsyncTaskLoader
doInBackground() loadInBackground()
onPostExecute() onLoadFinished()
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 32
Fundamentals nCommercial 4.0 International Lic
Langkah-langkah untuk subkelas
AsyncTaskLoader
1. Subkelas AsyncTaskLoader
2. Mengimplementasikan konstruktor
[Link]()
[Link]()
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 33
Fundamentals nCommercial 4.0 International Lic
Subkelas AsyncTaskLoader
public static class StringListLoader
extends AsyncTaskLoader<List<String>> {
public StringListLoader(Context context, String
queryString) {
super(context);
mQueryString = queryString;
}
}
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 34
Fundamentals nCommercial 4.0 International Lic
loadInBackground()
public List<String> loadInBackground() {
List<String> data = new ArrayList<String>;
//TODO: Load the data from the network or from a
database
return data;
}
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 35
Fundamentals nCommercial 4.0 International Lic
onStartLoading()
Saat restartLoader() atau initLoader() dipanggil,
LoaderManager akan memanggil callback
onStartLoading()
● Memeriksa data yang di-cache
● Mulai mengamati sumber data (jika diperlukan)
● Panggil forceLoad() untuk memuat data jika terjadi
perubahan atau tidak ada data yang di-cache
protected void onStartLoading()
Android Developer AsyncTask { forceLoad();
This work is licensed under a
36
Creative Commons Attribution-No
nCommercial 4.0 International Lic
Fundamentals
Mengimplementasikan callback loader
dalam Aktivitas
●onCreateLoader() — Membuat dan
mengembalikan Loader baru bagi ID yang
diberikan
●onLoadFinished() — Dipanggil bila loader yang
dibuat sebelumnya telah menyelesaikan
pemuatannya
● onLoaderReset() — Dipanggil bila loader yang
dibuat sebelumnya sedang disetel ulang sehingga
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 37
Fundamentals nCommercial 4.0 International Lic
onCreateLoader()
@Override
public Loader<List<String>> onCreateLoader(int id, Bundle args)
{
return new
StringListLoader(this,[Link]("queryString"));
}
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 38
Fundamentals nCommercial 4.0 International Lic
onLoadFinished()
Hasil dari loadInBackground() diberikan ke
onLoadFinished() sehingga Anda bisa
menampilkannya
public void onLoadFinished(Loader<List<String>> loader,
List<String> data) {
[Link](data);
}
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 39
Fundamentals nCommercial 4.0 International Lic
onLoaderReset()
● Hanya dipanggil bila loader dihancurkan
● Biasanya tidak ada isinya
@Override
public void onLoaderReset(final LoaderList<String>> loader)
{ }
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 40
Fundamentals nCommercial 4.0 International Lic
Mendapatkan loader dengan
initLoader()
● Dalam Aktivitas
● Gunakan pustaka dukungan agar kompatibel
dengan lebih banyak perangkat
getSupportLoaderManager().initLoader(0, null, this);
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 41
Fundamentals nCommercial 4.0 International Lic
Ketahui selengkapnya
● Referensi AsyncTask
● Referensi AsyncTaskLoader
● Referensi LoaderManager
● Panduan Proses dan Thread
● Panduan Loader
● Kinerja Thread UI:
Melampaui Batas Kecepatan Android This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 42
Fundamentals nCommercial 4.0 International Lic
Apa Berikutnya?
● Bab Konsep: 7.1 C AsyncTask dan AsyncTaskLoader
● Praktik: 7.1 P Membuat AsyncTask
This work is licensed under a
Android Developer AsyncTask Creative Commons Attribution-No 43
Fundamentals nCommercial 4.0 International Lic
SELESAI
Android Developer Fundamentals 44