Bir Bakışta'da hata işlemeyi iyileştirmeye yönelik API özellikleri Android 15. Bu sayfada, bu API'lerle ilgili en iyi uygulamalardan bazıları yer almaktadır.
Oluşturulamayan bileşenlerin etrafında bir "deneyim" bloku kullanın
Oluşturma işleminde, composable'ların etrafında "dene yakalama" bloklarına izin verilmez; ancak sarma özelliğini kullanabilirsiniz. uygulamanızın diğer mantığına da uygulanır. Bu özellik, Compose'u kullanarak aşağıdaki örnekte gösterildiği gibi:
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 bir Oluştur hatası varsa Glance, varsayılan hata düzeni:
Bir Bakışta, geliştiricilerin bileşim hâlinde yedek olarak bir XML düzeni sağlamasına olanak tanır. başarısız olur. Bu, Compose kodunda bir hata olduğu anlamına gelir. Bu hata kullanıcı arayüzü uygulamanızın kodunda yakalanmamış bir hata varsa da görünür.
class UpgradeWidget : GlanceAppWidget(errorUiLayout = R.layout.error_layout)
Bu düzen, kullanıcınızın etkileşimde bulunamayacağı statik bir düzendir ancak kullanışlı bir düzendir nasıl empati gösterebilirsiniz.
Varsayılan hata kullanıcı arayüzüne işlem ekleyin
Glance 1.1.0 sürümünden itibaren Glance, varsayılan hata işleme kodunu geçersiz kılmanıza olanak tanır. Bu şekilde, yakalanmamış bir istisna veya hatası bile olabilir.
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 giderme için RemoteViews
API'yi kullanıyor.
Böylece, XML kullanarak düzenleri ve işlem işleyicileri belirtebilirsiniz.
Aşağıdaki örneklerde geri bildirim göndermek için bir düğme içerir:
- 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ıl
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
metriğinize referans veren, beklemedeki bir amaç 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
ile amacınızı yerine getirin
override fun onReceive(context: Context, intent: Intent) {
super.onReceive(context, intent)
Log.e("ErrorOnClick", "Button was clicked.");
}