অ্যান্ড্রয়েড ১৫ থেকে গ্ল্যান্সে ত্রুটি পরিচালনা উন্নত করার জন্য এপিআই বৈশিষ্ট্য অন্তর্ভুক্ত করা হয়েছে। এই পৃষ্ঠাটি এই এপিআইগুলো সম্পর্কিত সর্বোত্তম অনুশীলনগুলো প্রদান করে।
অ-কম্পোজেবল কম্পোনেন্টগুলোর চারপাশে একটি try-catch ব্লক ব্যবহার করুন।
কম্পোজেবল অবজেক্টের চারপাশে ট্রাই-ক্যাচ ব্লক ব্যবহারের অনুমতি কম্পোজে নেই, কিন্তু এটি আপনার অ্যাপের অন্যান্য লজিককে এই ব্লকগুলোর মধ্যে র্যাপ করার সুযোগ দেয়। এর ফলে আপনি আপনার এরর ভিউয়ের জন্যও কম্পোজ ব্যবহার করতে পারেন, যেমনটি নিচের উদাহরণে দেখানো হয়েছে:
provideContent {
var isError = false;
var data = null
try {
val repository = (context.applicationContext as MyApplication).myRepository
data = repository.loadData()
} catch (e: Exception) {
isError = true;
//handleError
}
if (isError) {
ErrorView()
} else {
Content(data)
}
}
ডিফল্ট ত্রুটি লেআউট
যদি কোনো আনক্যাচড এক্সেপশন বা কম্পোজ এরর থাকে, তাহলে গ্ল্যান্স একটি ডিফল্ট এরর লেআউট প্রদর্শন করে:


কম্পোজিশন ব্যর্থ হলে, গ্লান্স ডেভেলপারদের একটি ফলব্যাক হিসেবে এক্সএমএল লেআউট প্রদান করার সুযোগ দেয়। এর মানে হলো, কম্পোজ কোডে কোনো ত্রুটি ছিল। আপনার অ্যাপের কোডে কোনো আনক্যাচড এরর থাকলেও এই এরর UI প্রদর্শিত হয়।
class UpgradeWidget : GlanceAppWidget(errorUiLayout = R.layout.error_layout)
এই লেআউটটি একটি স্থির লেআউট, যার সাথে আপনার ব্যবহারকারী কোনো মিথস্ক্রিয়া করতে পারবেন না, কিন্তু জরুরি পরিস্থিতিতে এটি উপযোগী।

ডিফল্ট ত্রুটি UI-তে অ্যাকশন যোগ করুন
Glance 1.1.0 সংস্করণ থেকে, আপনি ডিফল্ট এরর হ্যান্ডলিং কোড ওভাররাইড করতে পারবেন। এর মাধ্যমে, কম্পোজিশনে কোনো আনক্যাচড এক্সেপশন বা এরর ঘটলে আপনি অ্যাকশন কলব্যাক যোগ করতে পারবেন।
এই বৈশিষ্ট্যটি ব্যবহার করতে, onCompositionError() ফাংশনটি ওভাররাইড করুন:
GlanceAppWidget.onCompositionError(
context: Context,
glanceId: GlanceId,
appWidgetId: Int,
throwable: Throwable
)
এই ফাংশনে, ত্রুটি ব্যবস্থাপনার জন্য Glance, RemoteViews API-এর উপর নির্ভর করে। এর মাধ্যমে আপনি XML ব্যবহার করে লেআউট এবং অ্যাকশন হ্যান্ডলার নির্দিষ্ট করতে পারেন।
নিম্নলিখিত উদাহরণগুলি আপনাকে ধাপে ধাপে দেখাবে, কীভাবে প্রতিক্রিয়া পাঠানোর জন্য একটি বাটন সহ একটি ত্রুটি UI তৈরি করতে হয়:
error_layout.xmlফাইলটি লিখুন:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/Widget.MyApplication.AppWidget.Error" android:id="@android:id/background" android:layout_width="match_parent" android:textSize="24sp" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/error_title_view" android:layout_width="match_parent" android:textColor="@color/white" android:textFontWeight="800" android:layout_height="wrap_content" android:text="Example Widget Error" /> <LinearLayout android:layout_width="match_parent" android:orientation="horizontal" android:paddingTop="4dp" android:layout_height="match_parent"> <ImageButton android:layout_width="64dp" android:layout_height="64dp" android:layout_gravity="center" android:tint="@color/white" android:id="@+id/error_icon" android:src="@drawable/heart_broken_fill0_wght400_grad0_opsz24" /> <TextView android:id="@+id/error_text_view" android:layout_width="wrap_content" android:textColor="@color/white" android:layout_height="wrap_content" android:layout_gravity="center" android:padding="8dp" android:textSize="16sp" android:layout_weight="1" android:text="Useful Error Message!" /> </LinearLayout> </LinearLayout>onCompositionErrorফাংশনটি ওভাররাইড করুন:override fun onCompositionError( context: Context, glanceId: GlanceId, appWidgetId: Int, throwable: Throwable ) { val rv = RemoteViews(context.packageName, R.layout.error_layout) rv.setTextViewText( R.id.error_text_view, "Error was thrown. \nThis is a custom view \nError Message: `${throwable.message}`" ) rv.setOnClickPendingIntent(R.id.error_icon, getErrorIntent(context, throwable)) AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, rv) }একটি পেন্ডিং ইন্টেন্ট তৈরি করুন যা আপনার
GlanceAppWidgetReceiverরেফারেন্স করে:private fun getErrorIntent(context: Context, throwable: Throwable): PendingIntent { val intent = Intent(context, UpgradeToHelloWorldPro::class.java) intent.setAction("widgetError") return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) }আপনার
GlanceAppWidgetReceiverএ ইন্টেন্টটি পরিচালনা করুন:override fun onReceive(context: Context, intent: Intent) { super.onReceive(context, intent) Log.e("ErrorOnClick", "Button was clicked."); }