Pages

Thursday, March 26, 2015

Android Programming - Ekstrak AsyncTask ke dalam Class Terpisah

Sebuah aplikasi yang berkembang seiring berjalannya waktu, adanya update, penambahan fitur, banyaknya library yang digunakan, dan lain sebagainya secara otomatis akan membuat aplikasi tersebut menjadi lebih kompleks. Salah satu hal yang memiliki kesempatan tinggi dapat terjadi lebih dari sekali adalah penggunaan AsyncTask untuk menyelesaikan beberapa tugas. AsyncTask di definisikan sebagai inner class, dan biasanya digunakan untuk proses login, scanning, dan lain sebagainya yang berhubungan dengan operasi yang berjalan diatas thread worker. Pendefinisian AsyncTask pada setiap Activity akan menyebabkan sebuah Activity menjadi lebih kompleks, dan mungkin akan sulit untuk di pahami. Oleh karena di butuhkan sebuah teknik yang mampu menyederhanakan penggunaan AsyncTask tersebut.

Salah satu teknik yang saya temukan dari beberapa sumber yaitu dengan cara mengekstraksi AsyncTask ke dalam kelas lain yang terpisah, teknik ini dapat membuat class sumber atau Activity menjadi lebih sederhana dan juga memungkinkan class lain untuk dapat menggunakan AsyncTask yang telah di ekstrak tersebut.

Pertama, buat class dengan method generik, seperti berikut:
 
public interface AsyncTaskCompleteListener<T>
{
    /**
     * Dipanggil saat AsyncTask telah selesai dengan tugasnya.
     * @param result Objek yang dihasilkan dari AsyncTask.
     */
    public void onTaskComplete(T result);
}

Kemudian pada Activity, Anda dapat menyederhanakan inner class seperti berikut:

public class FetchMyDataTaskCompleteListener implements AsyncTaskCompleteListener<MyPojo>
    {
 
        @Override
        public void onTaskComplete(MyPojo result)
        {
            // lakukan sesuatu dengan hasil yang diberikan
        }
    }

Dibawah ini adalah contoh penggunaan AsyncTask pada kelas terpisah.

public class FetchMyDataTask extends AsyncTask<String, Integer, MyPojo>
{
    private static final String TAG = "FetchMyDataTask";
 
    private Context context;
    private AsyncTaskCompleteListener<MyPojo> listener;
 
    public FetchVehicleTask(Context ctx, AsyncTaskCompleteListener<MyPojo> listener)
    {
        this.context = ctx;
        this.listener = listener;
    }
 
    protected void onPreExecute()
    {
        super.onPreExecute();
    }
 
    @Override
    protected MyPojo doInBackground(String... strings)
    {
        MyPojo myPojo = null;
        // lakukan sesuatu dengan myPojo
        return myPojo;
    }
 
    @Override
    protected void onPostExecute(MyPojo myPojo)
    {
        super.onPostExecute(myPojo);
        listener.onTaskComplete(myPojo);
    }

Pada Activity, Gunakan statement dibawah ini untuk menjalankan tugas tugas pada AsyncTask.

new FetchMyDataTask(this, new FetchMyDataTaskCompleteListener()).execute("InputString");

Teknik diatas sangat fleksibel dan dapat digunakan untuk menyederhanakan/ merapikan tugas-tugas dari AsyncTask, Saya sendiri menggunakan teknik ini pada beberapa aplikasi.

Sumber: jameselsey.co.uk

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...