AsyncTask dapat diartikan sebagai proses asinkronous atau proses yang dilakukan secara terpisah dari proses utama, dalam hal ini adalah user interface (UI). Bahasa populer yang sering digunakan untuk menyebut istilah ini adalah proses yang dilakukan dibalik layar (background process).
Daftar isi catatan
- Tipe Umum dalam AsyncTask
- Langkah-Langkah Proses pada AsyncTask
- Menyiapkan Layout untu Percobaan AsyncTask
- Menyiapkan Activity untuk Percobaan AsyncTask
- Membuat Inner Class dengan extends AsyncTask
- Kode Lengkap MainActivity.java
- Output Eksekusi Project di Emulator
Tipe-Tipe Umum AsyncTask
AsyncTask secara umum memiliki 3 tipe generic. yaitu:
- Params. Parameter ini adalah ibarat sebuah komando yang harus dijalankan AsyncTask di background. Parameter dikirim dari UI melalui sebuah event.
- Progress. Tipe ini digunakan untuk memonitor progres atau kemajuan proses yang dijalankan di background. Tipe ini akan mengirim data ke UI secara simultan selama proses Asyncronous masih berjalan. Penerapan tipe ini seringkali dapat dilihat pada proses download yang dapat menampilkan progress download. Entah itu estimasi waktu download, total yang sudah didownload, atau lainnya.
- Result. Tipe ini digunakan untuk menampilkan hasil dari proses yang dijalankan di background.
[box type=”info” align=”” class=”” width=””]Tidak semua tipe AsyncTask selalu digunakan secara bersama-sama. Untuk menandai bahwa sebuah tipe tidak digunakan bisa menggunakan Void (V menggunakan kapital). Contoh:Â
private class MyTask extends AsyncTask<String, Void, Void> { ... }
 [/box]
4 Langkah Proses Yang dilakukan AsyncTask
Ketika suatu proses dijalankan melalui AsyncTask maka akan melaui beberapa tahap proses yang dilakukan, yaitu:
onPreExecute()
Tahapan ini dilakukan sebelum proses dieksekusi (executed). Proses ini dilakukan di UI Thread. Biasanya digunakan untuk mengonfigurasi proses AsyncTask atau secara umum menampilkan progress bar atau lainnya untuk menandai bahwa proses AsyncTask akan dijalankan.
doInBackground(String... params)
Tahapan ini dijalankan setelah tahapan pertama di atas selesai dijalankan. Tahapan ini adalah proses utama AsyncTask. Pada tahapan ini, kita bisa memonitor berjalannya progress menggunakan
publishProgress(Progress...)
yang akan mengirimkan data secara simultan ke tahapan
onProgressUpdate(Progress...)
onProgressUpdate(Progress...)
Tahapan ini bisa kita gunakan untuk mengirim atau menampilkan data di UI mengenai sejauh mana proses AsyncTask berjalan. Paling sering kita jumpai adalah menampilkan proses download.
onPostExecute(Result)
Tahapan ini digunakan untuk menampilkan hasil proses yang dijalankan di Background.
Sebuah gambar yang kuambil dari Stackoverflow ini mungkin akan memudahkan kita untuk memahami mengenai proses AsyncTask bekerja.

Referensi lebih jauh mengenai proses asinkronous ini bisa dibaca di situs resmi Android Developer di link berikut https://developer.android.com/reference/android/os/AsyncTask.html.
Cara Menggunakan AsyncTask di Android
Sekarang, kita mulai untuk menerapkan proses asinkronous pada aplikasi android yang sedang kita buat. Pada kesempatan ini, aku akan menerapkan AsyncTask pada project baru yang belum ada apa-apanya. Silahkan baca Cara membuat project baru di Android Setudio jika belum membuatnya.
Project ini akan menggunakan AsyncTask secara sederhana. Hanya menjalankan semacam setTimeOut() dengan durasi 20 detik. Selama proses AsyncTask berjalan, UI menampilkan progress bar yang berjalan dari 0 sampai 100 %.
Menyiapkan Layout
Buat layout dengan item sebagai berikut:
- TextView untuk menampilkan info sebelum progress, ketika progress berlangsung, dan setelah progress selesai dilaksananan.
- Button untuk memulai proses AsyncTask ketika tombol tersebut diklik
- ProgressBar untuk menampilkan presentase progress telah dilakukan
Kode layout tersebut secara keseluruhan bisa dilihat seperti di bawah ini:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.nusagates.asynctask.MainActivity"> <ProgressBar android:id="@+id/progressBar" style="@style/tallerBarStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="37dp" android:max="100" android:progress="0" android:visibility="invisible" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/progressBar" android:layout_centerHorizontal="true" android:layout_marginBottom="16dp" android:text="Sebelum dimulai" android:textColor="@android:color/background_dark" /> <Button android:id="@+id/btn_mulai" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/progressBar" android:layout_centerHorizontal="true" android:layout_marginTop="187dp" android:text="Mulai AsyncTask" /> </RelativeLayout>
Menambahkan Style untuk ProgressBar
Style ini ditambahkan pada file styles.xml yang terletak di dalam folder res–values. Style ini akan mengubah tampilan ProgressBar menjadi lebih tinggi.
<style name="tallerBarStyle" parent="@android:style/Widget.SeekBar"> <item name="android:indeterminateOnly">false</item> <item name="android:progressDrawable">@android:drawable/progress_horizontal</item> <item name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item> <item name="android:minHeight">50dip</item> <item name="android:maxHeight">100dip</item> </style>
Menyiapkan View di Activity
Pertama, deklarasikan TextView, Progressbar, Button di dalam class MainActivity.java
TextView text; ProgressBar pb; Button mulai;
Integrasikan variabel-variabel tersebut dengan komponen yang telah ditambahkan pada activity_main.xml. Pengintegrasian ini dilakukan di dalam method onCreate().
text =(TextView)findViewById(R.id.textView); mulai=(Button)findViewById(R.id.btn_mulai); pb=(ProgressBar)findViewById(R.id.progressBar);
Membuat Inner Class untuk Menjalankan AsyncTask
Kode inner class ditulis di luar method onCreate() namun masih di dalam class MainActivity.java
Kode tersebut ditulis dengan extends AsyncTask<param, progress, result>.
public class testAsync extends AsyncTask<String, Integer, String>{ //proses background dilakukan di sini }
di dalam innerclass testAsynct tersebut selanjutnya kita tambahkan proses preExecute() untuk menampilkan progressBar, mengganti text dan warna TextView sebelum dijalankan.
@Override protected void onPreExecute(){ //menjalankan perintah sebelum eksekusi pb.setVisibility(View.VISIBLE); text.setTextColor(Color.WHITE); text.setText("Memulai sesuai perintah..."); }
Selanjutnya membuat proses inti yang dijalankan secara asinkronous. Pada kesemtapan ini proses tersebut hanya berupa count douwn dari 20 sampai 0 dengan interval 1000 milisecond atau setara dengan 1 detik.
@Override protected String doInBackground(String... params) { //proses eksekusi dilakukan di sini for (int i = 0; i < 20; i++) { try { Thread.sleep(1000); publishProgress(i); } catch (InterruptedException e) { Thread.interrupted(); } } return "Selesai"; }
Selama proses AsyncTask berlangsung, Â
publishProgress(i);
 mengirim data i ke langkah
onProgressUpdate(progress...)
.
Selanjutnya, kita perlu menampilkan data mengenai sejauh mana proses AsyncTask tersebut berlangsung dengan kode seperti di bawah ini:
@Override protected void onProgressUpdate(Integer... Values){ //monitoring progress eksekusi untuk dikirim ke UI text.setText(String.valueOf(Values[0])); pb.setProgress((((100/20)*Values[0])+(100/20))); }
Selanjutnya, kita mengisi TextView dengan teks “selesai” yang diambil dari doInBackground() melalui argumen s.
@Override protected void onPostExecute(String s){ //hasil eksekusi ditampilkan di sini super.onPostExecute(s); if(s!=null && s!=""){ text.setText(s); } }
Terakhir, kita eksekusi AsyncTask ketika tombol yang kita buat diklik dengan kode berikut:
mulai.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new testAsync().execute(""); } });
Kode lengkap MainActivity.java adalah seperti di bawah ini:
package com.nusagates.asynctask; import android.graphics.Color; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; public class MainActivity extends AppCompatActivity { TextView text; ProgressBar pb; Button mulai; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text =(TextView)findViewById(R.id.textView); mulai=(Button)findViewById(R.id.btn_mulai); pb=(ProgressBar)findViewById(R.id.progressBar); mulai.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new testAsync().execute(""); } }); } public class testAsync extends AsyncTask<String, Integer, String>{ @Override protected void onPreExecute(){ //menjalankan perintah sebelum eksekusi pb.setVisibility(View.VISIBLE); text.setTextColor(Color.WHITE); text.setText("Memulai sesuai perintah..."); } @Override protected String doInBackground(String... params) { //proses eksekusi dilakukan di sini for (int i = 0; i < 20; i++) { try { Thread.sleep(1000); publishProgress(i); } catch (InterruptedException e) { Thread.interrupted(); } } return "Selesai"; } @Override protected void onProgressUpdate(Integer... Values){ //monitoring progress eksekusi untuk dikirim ke UI text.setText(String.valueOf(Values[0])); pb.setProgress((((100/20)*Values[0])+(100/20))); } @Override protected void onPostExecute(String s){ //hasil eksekusi ditampilkan di sini super.onPostExecute(s); if(s!=null && s!=""){ text.setText(s); } } } }
Hasil eksekusi project ini bisa dilihat pada gambar di bawah ini:

Demikian cara menggunakan AsyncTask di Android.