নিম্নলিখিত বিভাগগুলি বর্ণনা করে যে কীভাবে GlanceAppWidget আপডেট করতে হয় এবং এর
স্ট্যাটাস ম্যানেজ করতে হয়।
GlanceAppWidget-এর অবস্থা ম্যানেজ করুন
উইজেট তৈরি করা হলে বা আপডেট করার প্রয়োজন হলে, প্রদত্ত GlanceAppWidget ক্লাস ইনস্ট্যান্টিয়েট করা হয়, তাই এটি স্টেটলেস ও প্যাসিভ হওয়া উচিত।
স্ট্যাটাসের ধারণাকে নিম্নলিখিত ভাগে ভাগ করা যেতে পারে:
- অ্যাপ্লিকেশনের অবস্থা: উইজেটের জন্য প্রয়োজনীয় অ্যাপের অবস্থা বা কন্টেন্ট। যেমন, ব্যবহারকারীর দ্বারা সংজ্ঞায়িত সংরক্ষিত গন্তব্যের (যেমন, ডেটাবেস) একটি তালিকা।
- Glance স্টেট: নির্দিষ্ট স্টেট যা শুধুমাত্র অ্যাপ উইজেটের সাথে প্রাসঙ্গিক এবং অ্যাপের স্টেটকে পরিবর্তন বা প্রভাবিত করে না। যেমন, উইজেটে একটি চেকবক্স বেছে নেওয়া হয়েছে বা কাউন্টার বাড়ানো হয়েছে।
অ্যাপ্লিকেশান অবস্থা ব্যবহার করুন
অ্যাপ উইজেট প্যাসিভ হতে হবে। প্রতিটি অ্যাপ্লিকেশন ডেটা লেয়ার ম্যানেজ করা এবং উইজেট UI-তে প্রতিফলিত হওয়া অলস, লোডিং এবং সমস্যার মতো স্ট্যাটাস ম্যানেজ করার জন্য দায়ী।
যেমন, নিম্নলিখিত কোডটি রিপোজিটরি লেয়ার থেকে ইন-মেমরি ক্যাশে থেকে গন্তব্যগুলি ফিরিয়ে আনে, গন্তব্যগুলির স্টোর করা তালিকা প্রদান করে এবং এর অবস্থার উপর নির্ভর করে একটি ভিন্ন UI প্রদর্শন করে:
class DestinationAppWidget : GlanceAppWidget() { // ... @Composable fun MyContent() { val repository = remember { DestinationsRepository.getInstance() } // Retrieve the cache data everytime the content is refreshed val destinations by repository.destinations.collectAsState(State.Loading) when (destinations) { is State.Loading -> { // show loading content } is State.Error -> { // show widget error content } is State.Completed -> { // show the list of destinations } } } }
যখনই স্ট্যাটাস বা ডেটা পরিবর্তন হয়, তখন বিজ্ঞপ্তি পাঠানো এবং উইজেট আপডেট করার দায়িত্ব অ্যাপের। আরও তথ্যের জন্য GlanceAppWidget আপডেট করুন দেখুন।
GlanceAppWidget আপডেট করুন
আপনি GlanceAppWidget ব্যবহার করে উইজেট কন্টেন্ট আপডেট করার অনুরোধ করতে পারেন। GlanceAppWidget স্টেট ম্যানেজ করুন বিভাগে
যেমন ব্যাখ্যা করা হয়েছে, অ্যাপ
উইজেট অন্য প্রসেসে হোস্ট করা হয়। Glance কন্টেন্টকে আসল RemoteViews-এ অনুবাদ করে
এবং হোস্টকে পাঠায়। কন্টেন্ট আপডেট করতে, Glance-কে
অবশ্যই RemoteViews আবার তৈরি করে পাঠাতে হবে।
আপডেট পাঠাতে, GlanceAppWidget ইনস্ট্যান্সের update পদ্ধতি কল করুন,
context এবং glanceId প্রদান করে:
MyAppWidget().update(context, glanceId)
glanceId পেতে, GlanceAppWidgetManager-এ কোয়েরি করুন:
val manager = GlanceAppWidgetManager(context) val widget = GlanceSizeModeWidget() val glanceIds = manager.getGlanceIds(widget.javaClass) glanceIds.forEach { glanceId -> widget.update(context, glanceId) }
অন্যথায়, GlanceAppWidget update এক্সটেনশনগুলির মধ্যে একটি ব্যবহার করুন:
// Updates all placed instances of MyAppWidget MyAppWidget().updateAll(context) // Iterate over all placed instances of MyAppWidget and update if the state of // the instance matches the given predicate MyAppWidget().updateIf<State>(context) { state -> state == State.Completed }
আপনার অ্যাপ্লিকেশনের যেকোনও অংশ থেকে এইসব মেথড কল করা যেতে পারে। যেহেতু এগুলি
suspend ফাংশন, তাই আমরা এগুলিকে মূল থ্রেড স্কোপের বাইরে লঞ্চ করার
সাজেস্ট করি। নিম্নলিখিত উদাহরণে, সেগুলি CoroutineWorker-এ লঞ্চ করা হয়েছে:
class DataSyncWorker( val context: Context, val params: WorkerParameters, ) : CoroutineWorker(context, params) { override suspend fun doWork(): Result { // Fetch data or do some work and then update all instance of your widget MyAppWidget().updateAll(context) return Result.success() } }
কোরুটিন সম্পর্কে আরও জানতে Android-এ Kotlin কোরুটিন দেখুন।
উইজেট কখন আপডেট করতে হবে
উইজেট অবিলম্বে বা নির্দিষ্ট সময় অন্তর আপডেট করুন।
আপনার অ্যাপ চালু থাকলে, আপনার উইজেট অবিলম্বে আপডেট হতে পারে। যেমন:
- ব্যবহারকারী কোনও উইজেটের সাথে ইন্টার্যাক্ট করলে, কোনও অ্যাকশন, ল্যাম্বডা কল বা কোনও অ্যাক্টিভিটি লঞ্চ করার ইনটেন্ট ট্রিগার করে।
- আপনার ব্যবহারকারী যখন আপনার অ্যাপের সাথে ফোরগ্রাউন্ডে ইন্টার্যাক্ট করেন অথবা Firebase Cloud Messaging (FCM) মেসেজ বা ব্রডকাস্টের উত্তরে অ্যাপটি যখন ইতিমধ্যেই আপডেট হচ্ছে।
এইসব ক্ষেত্রে, এই নির্দেশিকায় যেভাবে বর্ণনা করা হয়েছে সেইভাবে update মেথড কল করুন।
আপনার অ্যাপ চালু না থাকলেও, আপনার উইজেট নির্দিষ্ট সময় অন্তর আপডেট হতে পারে। যেমন:
- প্রতি ৩০ মিনিটে একবার করে উইজেট আপডেট করতে
updatePeriodMillisব্যবহার করুন। - আরও ঘন ঘন আপডেট শিডিউল করতে
WorkManagerব্যবহার করুন, যেমন প্রতি ১৫ মিনিটে। - ব্রডকাস্টের উত্তরে উইজেট আপডেট করুন।
রিসোর্স
- Glance-এর সাহায্যে উইজেট তৈরি করা (কোডল্যাব)
- Android-এর ভবিষ্যতের জন্য তৈরি করা: উইজেট চ্যাপ্টার (ভিডিও)