Compose ↔ View interop və miqrasiya
İki dünya bir tətbiqdə yaşaya bilir — miqrasiya tədricən gedir:
- View içində Compose: layout-a
ComposeViewqoyulur,setContent { }ilə doldurulur. Fragment-lərdəViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyedmütləəq verilməlidir — yoxsa composition fragment view-undan uzun yaşayıb leak yaradır. - Compose içində View:
AndroidView(factory = { context -> MapView(context) }, update = { view -> ... })— Compose-da qarşılığı olmayan komponentlər (xəritə, WebView, reklam SDK-ları, custom chart-lar) üçün. - Theme körpüsü: Material theme-lərin XML ↔ Compose sinxronu üçün adapter yanaşmalar; dizayn tokenlərini tək mənbədə saxlamaq vacibdir.
Miqrasiya strategiyası (rəsmi tövsiyə): aşağıdan yuxarı — əvvəl kiçik komponentlər/yeni ekranlar Compose-da, sonra bütöv ekranlar, ən sonda navigation. Yeni feature-lar Compose-da yazılır, köhnə ekranlar toxunanda köçürülür.
// 1) Fragment-də ComposeView (View → Compose)
override fun onCreateView(...): View =
ComposeView(requireContext()).apply {
setViewCompositionStrategy(
ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed
)
setContent {
BankTheme {
TransferScreen()
}
}
}
// 2) Compose-da köhnə custom view (Compose → View)
@Composable
fun SignatureBox(onSigned: (Bitmap) -> Unit) {
AndroidView(
factory = { context ->
SignatureView(context).apply { listener = onSigned }
},
update = { view -> view.clearIfNeeded() }
)
}Hər iki istiqamətdə interop
Müsahibədə miqrasiya sualının gözlənilən cavab qəlibi: (1) böyük partlayış yox — tədricən; (2) haradan başlamaq — dizayn sistemi komponentləri (düymə, input) və yeni ekranlar; (3) riskli yerlər — RecyclerView item-lərində ComposeView (performans üçün RecyclerView-un Compose adapter dəstəyi), fragment-lərdə composition strategy, iki theme sisteminin sinxronu; (4) komanda tərəfi — Compose bilməyənlər üçün code review + pair. Sənin vəziyyətin (XML bilirsən, Compose öyrənirsən) bu sualda üstünlükdür: "öyrənmə yolum elə miqrasiya yoludur" deyə bilərsən.
🛠 Tapşırıq
Hər iki istiqamətdə interop qur:
- Mövcud (və ya yeni) fragment-ə
ComposeViewəlavə et. ƏvvəlViewCompositionStrategyvermədən işlət, LeakCanary-yə bax; sonraDisposeOnViewTreeLifecycleDestroyedtəyin et. - Compose ekranında
AndroidViewilə köhnə bir View göstər (məs.WebViewvə ya sadə custom view) vəupdatelambda-sının nə vaxt çağırıldığını logla.
Bitdi sayılır: "böyük XML kod bazasını necə köçürərsən" sualına mərhələli planın hazırdırsa.
📚 Mənbələr və sənədlər
- Interop API-larırəsmideveloper.android.com
- Compose-a miqrasiya strategiyasırəsmideveloper.android.com