WorkManager, çalışanlar için orta seviye ilerlemeyi ayarlama ve gözlemleme konusunda birinci sınıf desteğe sahiptir. Çalışan, uygulama ön plandayken çalışıyorsa bu bilgiler WorkInfo
öğesinin LiveData
değerini döndüren API'ler kullanılarak da kullanıcıya gösterilebilir.
ListenableWorker
artık setProgressAsync()
API'yi desteklemektedir. Bu API, aradaki ilerlemeyi sürdürmesine olanak tanır. Bu API'ler, geliştiricilerin, kullanıcı arayüzü tarafından gözlemlenebilecek ara ilerleme durumlarını ayarlamasına olanak tanır.
İlerleme durumu, seri hale getirilebilen bir özellikler kapsayıcısı olan (input
ve
output
'e benzer ve aynı kısıtlamalara tabidir) Data
türüyle temsil edilir.
İlerleme durumu bilgileri yalnızca ListenableWorker
çalışırken gözlemlenebilir ve güncellenebilir. Yürütme işlemini tamamladıktan sonra ListenableWorker
üzerinde ilerleme durumunu ayarlama denemeleri yok sayılır. Ayrıca, getWorkInfoBy…()
veya getWorkInfoBy…LiveData()
yöntemlerinden birini kullanarak ilerleme bilgilerini gözlemleyebilirsiniz. Bu yöntemler, Data
değerini döndüren yeni bir getProgress()
yöntemine sahip WorkInfo
örneklerini döndürür.
Güncelleme İlerleme Durumu
ListenableWorker
veya Worker
kullanan Java geliştiricileri için setProgressAsync()
API bir ListenableFuture<Void>
döndürür. Güncelleme işleminin ilerleme durumu bilgilerinin bir veritabanında depolanması nedeniyle, güncelleme ilerlemesi eşzamansız olarak yapılır.
Kotlin'de, ilerleme durumunu güncellemek için CoroutineWorker
nesnesinin setProgress()
uzantı işlevini kullanabilirsiniz.
Bu örnekte basit bir ProgressWorker
gösterilmektedir. Worker
, başladığında ilerleme durumunu 0 olarak ayarlar ve tamamlandıktan sonra ilerleme değerini 100 olarak günceller.
Kotlin
import android.content.Context import androidx.work.CoroutineWorker import androidx.work.Data import androidx.work.WorkerParameters import kotlinx.coroutines.delay class ProgressWorker(context: Context, parameters: WorkerParameters) : CoroutineWorker(context, parameters) { companion object { const val Progress = "Progress" private const val delayDuration = 1L } override suspend fun doWork(): Result { val firstUpdate = workDataOf(Progress to 0) val lastUpdate = workDataOf(Progress to 100) setProgress(firstUpdate) delay(delayDuration) setProgress(lastUpdate) return Result.success() } }
Java
import android.content.Context; import androidx.annotation.NonNull; import androidx.work.Data; import androidx.work.Worker; import androidx.work.WorkerParameters; public class ProgressWorker extends Worker { private static final String PROGRESS = "PROGRESS"; private static final long DELAY = 1000L; public ProgressWorker( @NonNull Context context, @NonNull WorkerParameters parameters) { super(context, parameters); // Set initial progress to 0 setProgressAsync(new Data.Builder().putInt(PROGRESS, 0).build()); } @NonNull @Override public Result doWork() { try { // Doing work. Thread.sleep(DELAY); } catch (InterruptedException exception) { // ... handle exception } // Set progress to 100 after you are done doing your work. setProgressAsync(new Data.Builder().putInt(PROGRESS, 100).build()); return Result.success(); } }
İlerlemeyi Gözlemleme
İlerleme bilgilerini gözlemlemek de basittir. getWorkInfoBy…()
veya getWorkInfoBy…LiveData()
yöntemlerini kullanabilir ve WorkInfo
referansı alabilirsiniz.
getWorkInfoByIdLiveData
API'nin kullanıldığı bir örneği aşağıda görebilirsiniz.
Kotlin
WorkManager.getInstance(applicationContext) // requestId is the WorkRequest id .getWorkInfoByIdLiveData(requestId) .observe(observer, Observer { workInfo: WorkInfo? -> if (workInfo != null) { val progress = workInfo.progress val value = progress.getInt(Progress, 0) // Do something with progress information } })
Java
WorkManager.getInstance(getApplicationContext()) // requestId is the WorkRequest id .getWorkInfoByIdLiveData(requestId) .observe(lifecycleOwner, new Observer<WorkInfo>() { @Override public void onChanged(@Nullable WorkInfo workInfo) { if (workInfo != null) { Data progress = workInfo.getProgress(); int value = progress.getInt(PROGRESS, 0) // Do something with progress } } });
Worker
nesnelerini gözlemleme hakkında daha fazla belge için Çalışma durumlarını ve çalışmaları gözlemleme bölümünü okuyun.