Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Menentukan kode untuk dijalankan di thread

Panduan ini menunjukkan cara mengimplementasikan class Runnable, yang menjalankan kode dalam metode Runnable.run() -nya di thread terpisah. Anda juga dapat meneruskan Runnable ke objek lain yang nanti dapat melampirkannya ke thread dan menjalankannya. Satu atau beberapa objek Runnable yang menjalankan operasi tertentu terkadang disebut sebagai tugas.

Thread dan Runnable adalah class dasar yang, dengan sendirinya, hanya memiliki kekuatan terbatas. Akan tetapi, class tersebut adalah dasar dari class Android yang canggih seperti HandlerThread, AsyncTask, dan IntentService. Thread dan Runnable juga merupakan dasar dari class ThreadPoolExecutor. Class ini secara otomatis mengelola thread dan task queue, dan bahkan dapat menjalankan beberapa thread secara paralel.

Menentukan class yang mengimplementasikan Runnable

Membuat class yang mengimplementasikan Runnable sangatlah mudah. Contoh:

Kotlin

    class PhotoDecodeRunnable : Runnable {
        ...
        override fun run() {
            /*
             * Code you want to run on the thread goes here
             */
            ...
        }
        ...
    }

Java

    public class PhotoDecodeRunnable implements Runnable {
        ...
        @Override
        public void run() {
            /*
             * Code you want to run on the thread goes here
             */
            ...
        }
        ...
    }
    

Mengimplementasikan metode run()

Dalam class, metode Runnable.run() berisi kode yang dijalankan. Biasanya, semuanya diizinkan dalam Runnable. Ingat bahwa Runnable tidak dapat berjalan pada UI thread, sehingga tidak dapat secara langsung memodifikasi objek UI seperti halnya objek View. Untuk berkomunikasi dengan UI thread, Anda harus menggunakan teknik yang dijelaskan dalam tutorial Berkomunikasi dengan UI thread.

Di awal metode run(), tetapkan thread untuk menggunakan prioritas latar belakang dengan memanggil Process.setThreadPriority() dengan THREAD_PRIORITY_BACKGROUND. Pendekatan ini mengurangi persaingan resource antara thread objek Runnable dan UI thread.

Anda juga harus menyimpan referensi ke objek Runnable Thread dalam Runnable itu sendiri, dengan memanggil Thread.currentThread().

Cuplikan berikut menunjukkan cara menyiapkan metode run():

Kotlin

    class PhotoDecodeRunnable : Runnable {
    ...
        /*
         * Defines the code to run for this task.
         */
        override fun run() {
            // Moves the current Thread into the background
            android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND)
            ...
            /*
             * Stores the current Thread in the PhotoTask instance,
             * so that the instance
             * can interrupt the Thread.
             */
            photoTask.setImageDecodeThread(Thread.currentThread())
            ...
        }
    ...
    }
    

Java

    class PhotoDecodeRunnable implements Runnable {
    ...
        /*
         * Defines the code to run for this task.
         */
        @Override
        public void run() {
            // Moves the current Thread into the background
            android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
            ...
            /*
             * Stores the current Thread in the PhotoTask instance,
             * so that the instance
             * can interrupt the Thread.
             */
            photoTask.setImageDecodeThread(Thread.currentThread());
            ...
        }
    ...
    }
    

Informasi selengkapnya

Untuk mempelajari operasi multi thread di Android lebih lanjut, lihat panduan Ringkasan proses dan thread.

Contoh aplikasi

Untuk mencoba konsep dalam panduan ini, download ThreadSample.