Android 15'ten itibaren, Glance'ta hata işleme sürecini iyileştirmeye yönelik API özellikleri eklendi. Bu sayfada, bu API'lerle ilgili en iyi uygulamalar sunulmaktadır.
Birleştirilebilir olmayan bileşenlerin etrafında bir try-catch bloğu kullanma
Compose, bileşenler etrafında try-catch bloklarına izin vermez ancak uygulamanızın diğer mantığını bu bloklara sarmalamanıza olanak tanır. Bu sayede, aşağıdaki örnekte gösterildiği gibi hata görünümünüz için Oluştur'u kullanabilirsiniz:
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)
}
}
Varsayılan hata düzeni
Yakalanmamış bir istisna veya Oluşturma hatası varsa Glance, varsayılan hata düzenini gösterir:


Bir Bakışta, geliştiricilerin kompozisyon başarısız olursa yedek olarak bir XML düzeni sağlamasına olanak tanır. Bu, Oluştur kodunda bir hata olduğu anlamına gelir. Bu hata kullanıcı arayüzü, uygulamanızın kodunda yakalanmamış bir hata varsa da gösterilir.
class UpgradeWidget : GlanceAppWidget(errorUiLayout = R.layout.error_layout)
Bu düzen, kullanıcınızın etkileşimde bulunamayacağı statik bir düzendir ancak acil durumlarda kullanışlıdır.

Varsayılan hata kullanıcı arayüzüne işlem ekleme
Glance 1.1.0'dan itibaren Glance, varsayılan hata işleme kodunu geçersiz kılmanıza olanak tanır. Bu sayede, yakalanmayan bir istisna veya kompozisyonda hata olması durumunda işlem geri çağırma işlevleri ekleyebilirsiniz.
Bu özelliği kullanmak için onCompositionError()
işlevini geçersiz kılın:
GlanceAppWidget.onCompositionError(
context: Context,
glanceId: GlanceId,
appWidgetId: Int,
throwable: Throwable
)
Bu işlevde Glance, hata işleme için RemoteViews
API'ye geri döner.
Bu sayede XML kullanarak düzenleri ve işlem işleyicileri belirtebilirsiniz.
Aşağıdaki örneklerde, geri bildirim gönderme düğmesi içeren bir hata kullanıcı arayüzünün nasıl oluşturulacağı adım adım gösterilmektedir:
error_layout.xml
dosyasını yazın:<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
işlevini geçersiz kılma: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
öğenize referans veren bekleyen bir intent oluşturun: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
'ünüzde amacı işleme:override fun onReceive(context: Context, intent: Intent) { super.onReceive(context, intent) Log.e("ErrorOnClick", "Button was clicked."); }