GlanceAppWidget পরিচালনা এবং আপডেট করুন

নিম্নলিখিত বিভাগগুলিতে GlanceAppWidget কীভাবে আপডেট করতে হয় এবং এর অবস্থা পরিচালনা করতে হয় তা বর্ণনা করা হয়েছে।

GlanceAppWidget অবস্থা পরিচালনা করুন

প্রদত্ত GlanceAppWidget ক্লাসটি উইজেট তৈরি হলে বা আপডেটের প্রয়োজন হলে ইনস্ট্যানশিয়েট করা হয়, তাই এটি স্টেটলেস এবং প্যাসিভ হওয়া উচিত।

রাষ্ট্রের ধারণাটিকে নিম্নোক্তভাবে ভাগ করা যায়:

  • অ্যাপ্লিকেশন স্টেট : অ্যাপের সেই অবস্থা বা বিষয়বস্তু যা উইজেটটির জন্য প্রয়োজন। উদাহরণস্বরূপ, ব্যবহারকারী দ্বারা সংজ্ঞায়িত সংরক্ষিত গন্তব্যস্থলের (যেমন, ডেটাবেস) একটি তালিকা।
  • একনজর অবস্থা : এমন একটি নির্দিষ্ট অবস্থা যা শুধুমাত্র অ্যাপ উইজেটের জন্য প্রাসঙ্গিক এবং যা অ্যাপের অবস্থাকে পরিবর্তন বা প্রভাবিত করে না। উদাহরণস্বরূপ, উইজেটে একটি চেকবক্স নির্বাচন করা হয়েছে বা একটি কাউন্টার বাড়ানো হয়েছে।

অ্যাপ্লিকেশন অবস্থা ব্যবহার করুন

অ্যাপ উইজেটগুলো নিষ্ক্রিয় হওয়া উচিত। প্রতিটি অ্যাপ্লিকেশন ডেটা লেয়ার পরিচালনা এবং উইজেট 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 ব্যবহার করে আপনার উইজেটের কন্টেন্ট আপডেট করার জন্য অনুরোধ করতে পারেন। ‘Manage GlanceAppWidget state’ বিভাগে যেমন ব্যাখ্যা করা হয়েছে, অ্যাপ উইজেটগুলো একটি ভিন্ন প্রসেসে হোস্ট করা হয়। Glance কন্টেন্টটিকে প্রকৃত RemoteViews তে রূপান্তরিত করে এবং সেগুলোকে হোস্টে পাঠায়। কন্টেন্ট আপডেট করার জন্য, Glance-কে অবশ্যই RemoteViews গুলো পুনরায় তৈরি করে আবার পাঠাতে হয়।

আপডেটটি পাঠাতে, context এবং glanceId প্রদান করে GlanceAppWidget ইনস্ট্যান্সের update মেথডটি কল করুন:

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()
    }
}

কোরুটিন সম্পর্কে আরও বিস্তারিত জানতে অ্যান্ড্রয়েডে কোটলিন কোরুটিন দেখুন।

উইজেটগুলি কখন আপডেট করতে হবে

উইজেটগুলো অবিলম্বে অথবা নির্দিষ্ট সময় পর পর আপডেট করুন।

আপনার অ্যাপ চালু হওয়ার সাথে সাথেই আপনার উইজেটটি আপডেট হতে পারে। উদাহরণস্বরূপ:

  • যখন কোনো ব্যবহারকারী একটি উইজেটের সাথে ইন্টারঅ্যাক্ট করে, তখন একটি অ্যাকশন, একটি ল্যাম্বডা কল, অথবা কোনো অ্যাক্টিভিটি চালু করার জন্য একটি ইন্টেন্ট ট্রিগার হয়।
  • যখন আপনার ব্যবহারকারী ফোরগ্রাউন্ডে আপনার অ্যাপের সাথে ইন্টারঅ্যাক্ট করেন, অথবা যখন কোনো Firebase Cloud Messaging (FCM) মেসেজ বা ব্রডকাস্টের প্রতিক্রিয়ায় অ্যাপটি ইতিমধ্যেই আপডেট হচ্ছে।

এইসব ক্ষেত্রে, এই নির্দেশিকায় বর্ণিত পদ্ধতি অনুযায়ী update মেথডটি কল করুন।

আপনার অ্যাপ সক্রিয় না থাকলেও আপনার উইজেটটি পর্যায়ক্রমে আপডেট হতে পারে। উদাহরণস্বরূপ:

  • প্রতি ৩০ মিনিট অন্তর সর্বোচ্চ একবার উইজেটটি আপডেট করতে updatePeriodMillis ব্যবহার করুন।
  • WorkManager ব্যবহার করে আরও ঘন ঘন আপডেটের সময়সূচী নির্ধারণ করুন, যেমন প্রতি ১৫ মিনিট পর পর।
  • একটি ব্রডকাস্টের প্রতিক্রিয়ায় উইজেটটি আপডেট করুন।

সম্পদ