يتمتع WorkManager بدعم من الدرجة الأولى لإعداد المستوى المتوسط وملاحظته
للتقدم للعاملين. إذا كان العامل قيد التشغيل أثناء تشغيل التطبيق
في المقدّمة، يمكن أيضًا عرض هذه المعلومات للمستخدم باستخدام واجهات برمجة التطبيقات التي
عرض LiveData
WorkInfo
يتوافق ListenableWorker
الآن مع
setProgressAsync()
واجهة برمجة التطبيقات، التي تتيح إمكانية مواصلة تقدّم متوسط. تتيح واجهات برمجة التطبيقات هذه
على المطورين تحديد التقدم المتوسط الذي يمكن ملاحظته من خلال واجهة المستخدم.
يُشار إلى التقدّم الذي أحرزته بالنوع Data
،
وهي عبارة عن حاوية قابلة للتسلسل من الخصائص (تشبه input
output
وتخضع للقيود نفسها).
لا يمكن مراقبة معلومات التقدم وتحديثها إلا أثناء
"ListenableWorker
" قيد التشغيل. محاولات تحديد التقدم على ListenableWorker
وبعد اكتمال تنفيذها، يتم تجاهلها. يمكنك أيضًا ملاحظة التقدم
المعلومات باستخدام أحد getWorkInfoBy…()
أو
getWorkInfoBy…LiveData()
الطرق. تعرض هذه الطرق مثيلات
WorkInfo
، الذي يتضمّن إضافة جديدة
طريقة getProgress()
التي ترجع Data
.
مدى التقدُّم في عملية التحديث
لمطوّري برامج Java الذين يستخدمون ListenableWorker
أو Worker
،
setProgressAsync()
تعرض واجهة برمجة التطبيقات القيمة ListenableFuture<Void>
؛ تقدم التحديث غير متزامن،
بالنظر إلى أن عملية التحديث تتضمن تخزين معلومات التقدم في قاعدة بيانات.
في لغة Kotlin، يمكنك استخدام CoroutineWorker
الكائن setProgress()
لتحديث معلومات التقدم.
يعرض هذا المثال ProgressWorker
بسيط. يحدّد Worker
مستوى التقدّم على
0 عند البدء، وعند الانتهاء يقوم بتحديث قيمة التقدم إلى 100.
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(); } }
مراقبة التقدم
ويمكن أيضًا متابعة معلومات مستوى التقدم بسهولة. يمكنك استخدام صفحة
getWorkInfoBy…()
أو getWorkInfoBy…LiveData()
والحصول على مرجع إلى WorkInfo
.
إليك مثال يستخدم واجهة برمجة التطبيقات getWorkInfoByIdLiveData
.
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
، يُرجى الاطّلاع على
حالات العمل ومراقبة العمل.