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 ব্যবহার করে আপনার উইজেট সামগ্রী আপডেট করার অনুরোধ করতে পারেন। 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()
    }
}

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

কখন উইজেট আপডেট করবেন

অবিলম্বে বা পর্যায়ক্রমে উইজেট আপডেট করুন।

আপনার অ্যাপ জেগে থাকলে আপনার উইজেট অবিলম্বে আপডেট হতে পারে। যেমন:

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

এই ক্ষেত্রে, এই নির্দেশিকায় বর্ণিত update পদ্ধতিতে কল করুন।

যখন আপনার অ্যাপ জেগে থাকে না তখন আপনার উইজেট পর্যায়ক্রমে আপডেট হতে পারে। যেমন:

  • প্রতি 30 মিনিটে একবার পর্যন্ত উইজেট আপডেট করতে updatePeriodMillis ব্যবহার করুন।
  • আরও ঘন ঘন আপডেটের সময়সূচী করতে WorkManager ব্যবহার করুন, যেমন প্রতি 15 মিনিটে।
  • একটি সম্প্রচারের প্রতিক্রিয়া হিসাবে উইজেট আপডেট করুন।

সম্পদ