Chọn Jetpack Compose nếu…
- Bạn bắt đầu dự án Android mới hoặc rewrite một màn hình cũ.
- Bạn muốn ít boilerplate, code dễ test, và iteration nhanh.
- Bạn muốn tận dụng Material 3 và adaptive layout mới của Google.
So sánh Jetpack Compose và XML Views cho Android UI. Hiệu năng, learning curve, migration path - hướng dẫn chọn UI toolkit phù hợp.
Thang điểm 0-10 theo đánh giá cá nhân Dan Tech, 2026.
Tick những điều đúng với bạn. Kết quả nghiêng về bên nào nhiều hơn là gợi ý cho bạn.
Chưa tick điều nào
Tick ít nhất một câu để xem gợi ý.
Số liệu không ghi nguồn là ước lượng từ kinh nghiệm build app thật của Dan Tech - tham khảo tương đối, không phải benchmark chính thức.
| Tiêu chí | Jetpack Compose | XML Views |
|---|---|---|
| Paradigm | Thắng tiêu chí này: Declarative | Imperative |
| Lượng code | Thắng tiêu chí này: Ít hơn 40-60% | Nhiều boilerplate |
| Preview UI | Thắng tiêu chí này: Trực tiếp trong IDE | Cần build để xem |
| Reusability | Thắng tiêu chí này: Composable functions | Custom Views (phức tạp) |
| Type safety | Thắng tiêu chí này: Kotlin compiler check | Runtime check (XML attr) |
Đoạn code ngắn cho tác vụ phổ biến - nhìn là thấy độ dài và mức boilerplate khác nhau.
Button(onClick = { count++ }) {
Text("Đếm: $count")
}<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Đếm: 0" />Tăng trưởng mạnh, chiếm phần lớn job mới Android tại VN
Giảm dần, chủ yếu maintain dự án cũ
Nên chuyển dần và có chiến lược rõ ràng, không nên viết lại toàn bộ cùng lúc. Compose và XML có thể dùng chung trong một app qua AndroidView (XML trong Compose) và ComposeView (Compose trong XML). Chiến lược tối ưu: bắt đầu với các màn hình mới hoàn toàn bằng Compose, sau đó migrate dần các màn hình cũ khi có thay đổi lớn về tính năng. Tránh "big bang rewrite" vì chi phí và rủi ro quá cao. Lộ trình điển hình cho codebase 50-100 màn hình: 3 tháng đầu setup Compose và build các màn hình mới, 6-12 tháng tiếp theo migrate dần 50-70%, sau 18 tháng có thể đạt 90%+ Compose. Convert tool của Android Studio chỉ giúp một phần - migration thực sự cần redesign architecture.
Ở phiên bản đầu (1.0-1.2) thì có chậm hơn XML đáng kể, gây lo ngại trong cộng đồng. Nhưng từ Compose 1.5+ trở đi, hiệu năng đã tương đương XML và trong nhiều trường hợp còn tốt hơn nhờ smart recomposition và lazy layout. Compose Compiler tối ưu code tự động, skip recomposition cho các @Stable type, và LazyColumn hiệu quả hơn RecyclerView trong nhiều use case. Tuy nhiên hiệu năng Compose phụ thuộc vào việc developer viết code đúng cách (stable types, immutable state, key trong list). Code Compose viết cẩu thả có thể chậm hơn XML viết tốt. Tool Compose Compiler Report giúp identify các điểm cần tối ưu.
Có. Theo ước lượng thị trường VN năm 2026, hầu hết vị trí Android developer mới đều yêu cầu Jetpack Compose. Khoảng 85% JD mid-level và 95% JD senior đề cập đến Compose như kỹ năng bắt buộc hoặc highly preferred. Các công ty lớn và outsourcing đang tích cực migrate sang Compose-first stack. Không biết Compose đồng nghĩa với việc giới hạn nghiêm trọng cơ hội việc làm và mức lương. Junior developer mới ra trường cần làm chủ Compose từ đầu thay vì học XML rồi mới chuyển. XML chỉ còn cần thiết cho vị trí maintain legacy code, thường ở các công ty enterprise có codebase lớn.
Khoảng 2-4 tuần để productive với màn hình đơn giản, 2-3 tháng để master các khía cạnh nâng cao. Cần làm quen với declarative paradigm (rất khác imperative), state management trong Compose (remember, mutableStateOf, derivedStateOf), side effects (LaunchedEffect, DisposableEffect), và recomposition optimization. Compose Pathway của Google là tài liệu chính thức tốt nhất với hands-on codelabs. Sách "Jetpack Compose by Tutorials" của raywenderlich và YouTube channel Philipp Lackner cũng rất hữu ích. Sau 1 tháng sử dụng Compose, đa số XML developer cảm thấy không muốn quay lại XML vì sự ngắn gọn và năng suất.
Hầu hết các component phổ biến đã có Compose equivalent native: TextField, Button, LazyColumn (RecyclerView), Card, BottomNavigation, NavigationDrawer, ModalBottomSheet. Một vài component đặc thù như Spinner truyền thống, DatePicker phong cách cũ, hoặc CalendarView cần workaround hoặc dùng AndroidView wrapper. Material 3 trong Compose còn có nhiều component mới như SearchBar, BadgedBox, SegmentedButton mà XML không có. Đối với custom view phức tạp (canvas drawing, gestures), Compose cung cấp Modifier.drawBehind và pointerInput API mạnh mẽ hơn XML. Khi cần dùng XML library cũ, AndroidView cho phép embed seamless.
Recomposition là quá trình Compose vẽ lại UI khi state thay đổi. Compose runtime tự động track state dependencies và chỉ recompose các composable cần thiết. Nếu code không tuân theo @Stable type, không tách state xuống mức thấp nhất, hoặc không dùng key trong list, có thể gây over-recomposition và lag UI. Tool Compose Compiler Report (gradle plugin) generate báo cáo identify composable nào không skippable và tại sao. Quy tắc tối ưu: dùng immutable data class, tránh lambda inline có capture, dùng remember cho computation tốn kém, và split state theo scope nhỏ nhất. Sau 1-2 dự án, developer nắm được pattern và recomposition không còn là vấn đề.
Có, Compose tích hợp tốt với cả hai. LiveData dùng observeAsState() để chuyển sang Compose State. RxJava dùng subscribeAsState() qua thư viện androidx.compose.runtime:runtime-rxjava2. Tuy nhiên, khuyến nghị dùng Kotlin Flow + collectAsState() cho dự án mới vì tích hợp tự nhiên hơn với Compose, hỗ trợ structured concurrency, và là Google-recommended approach. Migration path: nếu app cũ dùng LiveData, có thể dùng observeAsState ngay khi chuyển sang Compose, sau đó migrate dần sang Flow trong các module mới. RxJava vẫn hữu ích cho stream processing phức tạp như debounce, combine từ nhiều source.
Có. Compose Multiplatform của JetBrains cho phép dùng Compose API trên iOS, Desktop (Windows/Mac/Linux), và Web (qua Compose for Web/JS) ngoài Android. Đây là một lợi thế lớn so với XML Views (chỉ Android). Compose Multiplatform 1.6+ đã production-ready cho Desktop và Android, iOS đang ở stable beta với roadmap rõ ràng. Cú pháp giống nhau 95% giữa các nền tảng, chỉ khác biệt ở các API platform-specific. Lợi thế này khiến Compose trở thành kỹ năng đáng đầu tư cho mobile developer muốn mở rộng sang cross-platform mà không cần học framework mới như Flutter hoặc React Native.
Jetpack Compose là tương lai không thể tránh khỏi của Android UI và quyết định không có đối thủ cho dự án mới năm 2026. Compose ngắn gọn hơn 40-60%, dễ test, dễ tái sử dụng, và được Google đầu tư mạnh nhất với toàn bộ Material 3, adaptive layout, và compose multiplatform. Nếu bạn bắt đầu dự án Android mới, hãy chọn Compose ngay từ đầu - không có lý do nào để dùng XML cho code mới. Nếu bạn maintain dự án XML lớn, chuyển dần sang Compose theo từng màn hình mới và rewrite các màn hình cũ khi có thay đổi lớn - đừng viết lại toàn bộ cùng lúc vì chi phí và rủi ro quá cao. Compose và XML có thể cùng tồn tại trong một app qua AndroidView/ComposeView, cho phép migration mượt mà. Đối với Android developer, đầu tư học Compose không còn là lựa chọn mà là yêu cầu bắt buộc - hầu hết tin tuyển dụng vị trí mới tại VN đều yêu cầu kỹ năng này. Bỏ qua Compose đồng nghĩa với việc giới hạn cơ hội nghề nghiệp nghiêm trọng trong vài năm tới.