WorkManager bietet erstklassigen Support für die Einrichtung und Beobachtung von
für die Arbeiter:innen. Wenn der Worker ausgeführt wurde, während sich die Anwendung im
können diese Informationen dem Nutzer auch
über APIs angezeigt werden, die
LiveData
von
WorkInfo
ListenableWorker
unterstützt jetzt die
setProgressAsync()
API, mit der der Zwischenfortschritt beibehalten werden kann. Diese APIs ermöglichen
Entwickelnden einen Zwischenfortschritt festzulegen, der auf der Benutzeroberfläche beobachtet werden kann.
Der Fortschritt wird durch den Typ Data
dargestellt.
ein serialisierbarer Container mit Eigenschaften (ähnlich input
und
output
und unterliegen denselben Einschränkungen).
Fortschrittsinformationen können nur während der
ListenableWorker
wird ausgeführt. Versuche, den Fortschritt für einen ListenableWorker
festzulegen
ausgeführt werden, ignoriert. Sie können auch den Fortschritt
getWorkInfoBy…()
oder
getWorkInfoBy…LiveData()
. Diese Methoden geben Instanzen von
WorkInfo
mit einer neuen
Methode getProgress()
das Data
zurückgibt.
Aktualisierungsfortschritt
Für Java-Entwickler, die ein ListenableWorker
verwenden
oder ein Worker
-Element, das
setProgressAsync()
Die API gibt Folgendes zurück: ListenableFuture<Void>
; Aktualisierung des Fortschritts asynchron ist,
Dabei werden Fortschrittsinformationen
in einer Datenbank gespeichert.
In Kotlin können Sie den CoroutineWorker
verwenden.
setProgress()
des Objekts
Erweiterungsfunktion, um Fortschrittsinformationen zu aktualisieren.
Dieses Beispiel zeigt eine einfache ProgressWorker
. Der Fortschritt von Worker
wird festgelegt auf
„0“ zu Beginn. Nach Abschluss wird der Fortschrittswert auf 100 aktualisiert.
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(); } }
Fortschritt beobachten
Auch die Beobachtung von Fortschrittsinformationen ist ganz einfach. Sie können die
getWorkInfoBy…()
oder getWorkInfoBy…LiveData()
Methoden und rufen Sie einen Verweis auf WorkInfo
ab.
In diesem Beispiel wird die getWorkInfoByIdLiveData
API verwendet.
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 } } });
Weitere Informationen zur Beobachtung von Worker
-Objekten finden Sie unter
Arbeitsstatus und Beobachtung der Arbeit.