Muhamad Saad Nurul Ishlah, M.Comp.
Program Studi Sistem Informasi, Sekolah Vokasi,
Universitas Pakuan
Jalur eksekusi independen dalam program yang sedang berjalan
Kode dieksekusi baris demi baris
Aplikasi berjalan di thread Java/Kotlin yang disebut "main" atau "UI thread"
Memunculkan UI di layar
Merespon tindakan pengguna dengan menangani UI events
Eksekusi operasi-operasi yang membutuhkan waktu lama di thread belakang layar (background thread)
Gunakan AsyncTask untuk mengimplementasikan pekerjaan-pekerjaan di belakang layar
doInBackground() - berjalan pada background thread
Semua pekerjaan yang akan dilakukan di belakang layar
onPostExecute() - berjalan pada thread utama ketika pekerjaan selesai
Memeroses hasil yang dikerjakan di belakang layar
Mempublikasikan hasil ke UI
private class MyAsyncTask extends AsyncTask<URL, Integer, Bitmap> {
@Override
protected void onPreExecute() {
// Lakukan pekerjaan yang diperlukan sebelum doInBackground(), seperti:
// 1. Munculkan Progress bar
// 2. Munculkan Toast
}
@Override
protected Bitmap doInBackground(String... query) {
// Dapatkan bitmap
return bitmap;
}
@Override
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
@Override
protected void onPostExecute(Bitmap result) {
// Lakukan sesuatu dengan bitmap yang didapatkan
}
}
Panggil subkelas AsyncTask yang dibuat pada kelas Komponen, misal pada kelas MainActivity
public class MainActivity extends AppCompatActivity {
...
public void loadImage (View view) {
String query = mEditText.getText().toString();
new MyAsyncTask(query).execute();
}
...
}
package id.ishlah.myasynctask;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
public static final String DEMO_ASYNC = "DemoAsync";
private TextView tvStatus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvStatus = (TextView) findViewById(R.id.tv_status);
DemoAsync demoAsync = new DemoAsync();
demoAsync.execute("Hello, this is AsyncTask Demo!");
}
private class DemoAsync extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
tvStatus.setText("status: onPreExecute");
}
@Override
protected String doInBackground(String... strings) {
Log.d(DEMO_ASYNC, "status: doInBackground");
try {
Thread.sleep(5000);
} catch (Exception e) {
Log.d(DEMO_ASYNC, e.getMessage());
}
return strings[0];
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
tvStatus.setText("status: onPostExecute: "+s);
}
}
}
Ketika terjadi perubahan konfigurasi pada perangkat Android (misal: rotasi), Activity akan dihancurkan
AsyncTask tidak dapat terhubung kembali ke Activity
AsyncTask baru akan dibuat setiap kali terjadi perubahan konfigurasi
AsyncTask yang lama tetap ada
Aplikasi dapat kehabisan memori atau crash
Pekerjaan-pekerjaan yang pendek atau yang dapat diintrupsi
Pekerjaan-pekerjaan yang tidak perlu dilaporkan kembali ke UI atau pengguna
Pekerjaan-pekerjaan yang berprioritas rendah yang dapat ditinggalkan meski tidak selesai
Jika tidak, gunakan AsyncTaskLoader
Video Tutorial AsyncTask
Diterjemahkan dari slide Android Developer Fundamentasl V2: AsyncTask and AsyncTaskLoader
UI Thread Performance: Exceed the Android Speed Limit
Video Tutorial: https://www.youtube.com/watch?v=uKx0FuVriqA