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

Membatalkan dan menghentikan pekerjaan

Jika sudah tidak lagi perlu pekerjaan yang diantrekan sebelumnya, Anda dapat memintanya untuk dibatalkan. Cara termudah untuk melakukannya adalah dengan membatalkan satu WorkRequest menggunakan id dan memanggil WorkManager.cancelWorkById(UUID):

Kotlin

    WorkManager.cancelWorkById(workRequest.id)
    

Java

    WorkManager.cancelWorkById(workRequest.getId());
    

Di dalamnya, WorkManager akan memeriksa State pekerjaan. Jika pekerjaan sudah selesai, tidak akan terjadi apa-apa. Jika belum, statusnya akan diubah menjadi CANCELLED dan pekerjaan tidak akan berjalan pada waktu berikutnya. Setiap WorkRequests yang bergantung pada pekerjaan ini juga akan diubah menjadi CANCELLED.

Selain itu, jika pekerjaan sedang RUNNING, worker juga akan menerima panggilan ke ListenableWorker.onStopped(). Ganti metode ini untuk menangani pembersihan potensial. Kami akan membahasnya lebih lanjut di bawah ini.

Anda juga dapat membatalkan WorkRequests berdasarkan tag menggunakan WorkManager.cancelAllWorkByTag(String). Ingat, metode ini akan membatalkan semua pekerjaan dengan tag tersebut. Selain itu, Anda dapat membatalkan semua pekerjaan yang memiliki nama unik menggunakan WorkManager.cancelUniqueWork(String).

Menghentikan worker yang berjalan

Ada berbagai alasan mengapa worker yang berjalan dapat dihentikan oleh WorkManager:

  • Anda secara eksplisit memintanya untuk dibatalkan (misalnya dengan memanggil WorkManager.cancelWorkById(UUID)).
  • Untuk pekerjaan unik, Anda secara eksplisit mengantrekan WorkRequest baru dengan ExistingWorkPolicy dari REPLACE. WorkRequest lama langsung dianggap dihentikan.
  • Batasan pekerjaan Anda tidak lagi terpenuhi.
  • Sistem menginstruksikan aplikasi agar menghentikan pekerjaan karena suatu alasan. Hal ini dapat terjadi jika Anda melebihi batas waktu eksekusi 10 menit. Pekerjaan akan dijadwalkan untuk dicoba lagi nanti.

Dalam kondisi ini, worker Anda akan menerima panggilan ke ListenableWorker.onStopped(). Anda harus melakukan pembersihan dan bersama-sama mengakhiri worker jika OS memutuskan untuk menonaktifkan aplikasi. Misalnya, Anda harus menutup tuas terbuka untuk database dan file pada saat ini, atau melakukannya pada waktu yang tersedia paling awal. Selain itu, Anda dapat melihat ListenableWorker.isStopped() setiap kali ingin memeriksa apakah Anda telah dihentikan. Meskipun Anda memberikan sinyal penyelesaian pekerjaan dengan menampilkan Result setelah onStopped() dipanggil, WorkManager akan mengabaikan Result karena worker tersebut telah dianggap berhenti.

Anda dapat melihat contoh cara menangani onStopped() di bagian Threading di WorkManager.