WorkManager, orta düzeyde ayarlamak ve gözlemlemek için birinci sınıf desteğe sahiptir
ne ifade ettiğine bakacağız. Çalışan, uygulama etkinken çalışıyorsa
Bu bilgiler, kullanıcıya gösterilebilecek API'ler aracılığıyla da
şunu döndür: LiveData
WorkInfo
.
ListenableWorker
artık şunları destekliyor:
setProgressAsync()
API. Bu API'ler,
geliştiricilerin kullanıcı arayüzünde gözlemlenebilecek ara ilerlemeler belirlemesini sağlayın.
İlerleme durumu Data
türüyle gösterilir.
Bunlar, seri dönüştürülebilir bir mülkler kapsayıcısıdır (input
ve
output
,
ve aynı kısıtlamalara tabidir).
İlerleme bilgileri yalnızca
ListenableWorker
çalışıyor. ListenableWorker
cihazında ilerleme durumunu ayarlama denemeleri
tamamlandıktan sonra yoksayılır. İlerleme durumunu
getWorkInfoBy…()
veya
getWorkInfoBy…LiveData()
yöntemlerine göz atın. Bu yöntemler,
WorkInfo
(yeni bir
getProgress()
yöntem
şu sonucu döndürür: Data
.
Güncelleme İlerleme Durumu
ListenableWorker
kullanan Java geliştiricileri için
veya Worker
setProgressAsync()
API bir ListenableFuture<Void>
döndürür; eşzamansız bir güncellemeyle,
Çünkü güncelleme süreci, ilerlemeyle ilgili bilgilerin bir veritabanında depolanmasını içerir.
Kotlin'de, CoroutineWorker
nesnenin setProgress()
uzantı işlevini kullanabilirsiniz.
Bu örnekte basit bir ProgressWorker
gösterilmektedir. Worker
ilerleme durumunu şu şekilde ayarlıyor:
0 olarak günceller. İşlem tamamlandığında ise ilerleme değeri 100 olarak güncellenir.
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. URL parametrelerinin Google tarafından nasıl ele alınmasını istediğinizi belirtmek için
getWorkInfoBy…()
veya getWorkInfoBy…LiveData()
yöntemleri ve WorkInfo
referansı alın.
getWorkInfoByIdLiveData
API'nin kullanıldığı bir örneği aşağıda bulabilirsiniz.
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
nesneleri gözlemleme hakkında daha fazla doküman için
Çalışma Durumları ve işi gözlemleme.