ওয়ার্ক ম্যানেজার কর্মীদের জন্য মধ্যবর্তী অগ্রগতি নির্ধারণ এবং পর্যবেক্ষণের জন্য প্রথম-শ্রেণীর সমর্থন রয়েছে। অ্যাপ্লিকেশানটি ফোরগ্রাউন্ডে থাকাকালীন কর্মী চলমান থাকলে, এই তথ্যটি API ব্যবহার করে ব্যবহারকারীকেও দেখানো যেতে পারে যা WorkInfo
এর LiveData
ফেরত দেয়।
ListenableWorker
এখন setProgressAsync()
API সমর্থন করে, যা এটিকে মধ্যবর্তী অগ্রগতি অব্যাহত রাখতে দেয়। এই APIগুলি বিকাশকারীদের মধ্যবর্তী অগ্রগতি সেট করতে দেয় যা UI দ্বারা পর্যবেক্ষণ করা যেতে পারে। অগ্রগতি Data
টাইপ দ্বারা প্রতিনিধিত্ব করা হয়, যা বৈশিষ্ট্যগুলির একটি ক্রমিক ধারক ( input
এবং output
অনুরূপ, এবং একই বিধিনিষেধ সাপেক্ষে)।
ListenableWorker
চলমান অবস্থায় শুধুমাত্র অগ্রগতির তথ্য পর্যবেক্ষণ ও আপডেট করা যাবে। একটি ListenableWorker
এর কার্য সম্পাদন সম্পন্ন করার পরে অগ্রগতি সেট করার প্রচেষ্টা উপেক্ষা করা হয়। এছাড়াও আপনি getWorkInfoBy…()
অথবা getWorkInfoBy…LiveData()
পদ্ধতি ব্যবহার করে অগ্রগতি তথ্য পর্যবেক্ষণ করতে পারেন। এই পদ্ধতিগুলি WorkInfo
এর উদাহরণ প্রদান করে, যার একটি নতুন getProgress()
পদ্ধতি রয়েছে যা Data
ফেরত দেয়।
আপডেটের অগ্রগতি
ListenableWorker
বা Worker
ব্যবহার করে জাভা ডেভেলপারদের জন্য, setProgressAsync()
API একটি ListenableFuture<Void>
প্রদান করে; আপডেটের অগ্রগতি অসিঙ্ক্রোনাস, এই কারণে যে আপডেট প্রক্রিয়াটি একটি ডাটাবেসে অগ্রগতির তথ্য সংরক্ষণ করে। কোটলিনে, আপনি অগ্রগতির তথ্য আপডেট করতে CoroutineWorker
অবজেক্টের setProgress()
এক্সটেনশন ফাংশন ব্যবহার করতে পারেন।
এই উদাহরণটি একটি সাধারণ ProgressWorker
দেখায়। Worker
যখন এটি শুরু হয় তখন তার অগ্রগতি 0 এ সেট করে এবং সমাপ্তির পরে অগ্রগতির মান 100 এ আপডেট করে।
কোটলিন
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() } }
জাভা
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
API ব্যবহার করে।
কোটলিন
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 } })
জাভা
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
অবজেক্টগুলি পর্যবেক্ষণ করার বিষয়ে আরও ডকুমেন্টেশনের জন্য, ওয়ার্ক স্টেটস এবং কাজ পর্যবেক্ষণ করুন।