Android 16 trong năm 2026: Các API mới, Desktop Mode và câu hỏi phỏng vấn kỹ thuật

Tìm hiểu chi tiết về Android 16 (API 36): chế độ edge-to-edge bắt buộc, Desktop Mode, ProgressStyle Notifications, Predictive Back và các câu hỏi phỏng vấn thường gặp cho lập trình viên Android.

Android 16 API mới Desktop Mode và câu hỏi phỏng vấn

Android 16 (API level 36) ra mắt vào quý 2 năm 2025 với tên mã "Baklava", đánh dấu bước ngoặt trong hệ sinh thái phát triển ứng dụng Android. Phiên bản này không chỉ mang đến những thay đổi về giao diện người dùng mà còn định hình lại cách ứng dụng tương tác với các thiết bị màn hình lớn, chế độ desktop và hệ thống thông báo. Đối với những lập trình viên Android đang chuẩn bị cho các buổi phỏng vấn kỹ thuật trong năm 2026, việc nắm vững những API mới này là yếu tố then chốt để tạo ấn tượng với nhà tuyển dụng.

Gợi ý phỏng vấn

Trong các buổi phỏng vấn Android năm 2026, nhà tuyển dụng thường đánh giá cao ứng viên có kiến thức cập nhật về phiên bản Android mới nhất. Việc hiểu rõ edge-to-edge enforcement, Desktop Mode và ProgressStyle Notification thể hiện khả năng tự học và thích ứng của ứng viên. Hãy chuẩn bị cả ví dụ code lẫn giải thích khái niệm để tạo ấn tượng tốt nhất.

Mô hình phát hành SDK kép: Major và Minor

Bắt đầu từ Android 16, Google áp dụng chiến lược phát hành SDK hoàn toàn mới với hai đợt cập nhật mỗi năm. Bản phát hành chính (major release) vào Q2 mang API level mới cùng toàn bộ thay đổi về hành vi ứng dụng. Bản cập nhật bổ sung (minor release) vào Q4 tập trung vào sửa lỗi, tối ưu hiệu suất và bổ sung API gia tăng mà không có breaking changes.

Mô hình này mang lại nhiều lợi ích cho cộng đồng phát triển. Lập trình viên có thể dự đoán chính xác thời điểm cần cập nhật targetSdkVersion. Người dùng được tiếp cận tính năng mới nhanh hơn thông qua minor release. Các nhà sản xuất thiết bị cũng có nhiều thời gian hơn để chuẩn bị firmware tương thích.

Điều quan trọng cần lưu ý là chỉ có major release mới mang đến thay đổi behavior có thể ảnh hưởng đến ứng dụng hiện tại. Minor release đảm bảo tương thích ngược, giúp lập trình viên yên tâm khi cập nhật.

Edge-to-Edge Enforcement: Hiển thị toàn màn hình bắt buộc

Thay đổi đáng chú ý nhất của Android 16 là việc bắt buộc hiển thị edge-to-edge cho tất cả ứng dụng target API 36 trở lên. Hệ thống sẽ tự động mở rộng nội dung ứng dụng ra toàn bộ màn hình, bao gồm cả vùng status bar và navigation bar. Không có tùy chọn để từ chối (opt-out) tính năng này.

MainActivity.ktkotlin
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            Scaffold(
                modifier = Modifier.fillMaxSize()
            ) { innerPadding ->
                MainContent(
                    modifier = Modifier.padding(innerPadding)
                )
            }
        }
    }
}

Hàm enableEdgeToEdge() từ thư viện AndroidX Activity là cách chuẩn để kích hoạt chế độ này. Scaffold component của Jetpack Compose cung cấp innerPadding tự động tính toán khoảng cách an toàn cho nội dung, đảm bảo không bị che khuất bởi system bars.

Nhiều API cũ không còn hiệu lực trên Android 16. R.attr#windowOptOutEdgeToEdgeEnforcement bị loại bỏ hoàn toàn. Các method Window.setNavigationBarColor()Window.setStatusBarColor() bị deprecate. Thuộc tính android:fitsSystemWindows không hoạt động như mong đợi. Thay vào đó, lập trình viên cần sử dụng WindowInsets API để xử lý padding chính xác.

Ứng dụng thích ứng và thay đổi giới hạn hướng màn hình

Android 16 xóa bỏ các giới hạn về hướng màn hình và khả năng resize trên thiết bị màn hình lớn. Trên các màn hình có smallestScreenWidth >= 600dp, các thuộc tính như screenOrientation, resizableActivity và giới hạn tỷ lệ khung hình trong manifest sẽ bị bỏ qua hoàn toàn.

kotlin
// Responsive layout using WindowSizeClass
@Composable
fun AdaptiveLayout() {
    val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
    when {
        windowSizeClass.windowWidthSizeClass == 
            WindowWidthSizeClass.EXPANDED -> {
            TwoPaneLayout()
        }
        windowSizeClass.windowWidthSizeClass == 
            WindowWidthSizeClass.MEDIUM -> {
            MediumLayout()
        }
        else -> {
            CompactLayout()
        }
    }
}

WindowSizeClass API phân loại kích thước cửa sổ ứng dụng thành ba nhóm chính. COMPACT dành cho điện thoại thông minh ở chế độ dọc với bottom navigation và bố cục một cột. MEDIUM phù hợp với tablet ở chế độ dọc hoặc điện thoại ở chế độ ngang, sử dụng navigation rail bên trái. EXPANDED áp dụng cho tablet ở chế độ ngang hoặc desktop windowing với panel điều hướng cố định và nội dung chi tiết bên cạnh.

Thay đổi này phản ánh tầm nhìn của Google về một hệ sinh thái Android thống nhất, nơi một ứng dụng duy nhất có thể chạy tối ưu trên mọi form factor từ điện thoại, tablet, thiết bị gập cho đến màn hình desktop.

Desktop Mode và Connected Displays

Desktop Mode là tính năng nổi bật nhất của Android 16, biến điện thoại hoặc tablet Android thành một nền tảng năng suất khi kết nối với màn hình ngoài. Ứng dụng có thể chạy trong cửa sổ có thể thay đổi kích thước tự do, hỗ trợ đầy đủ bàn phím vật lý, chuột và trackpad.

LaunchOnExternalDisplay.ktkotlin
fun launchOnExternalDisplay(context: Context) {
    val displayManager = context.getSystemService(
        Context.DISPLAY_SERVICE
    ) as DisplayManager
    val externalDisplays = displayManager.displays.filter {
        it.displayId != Display.DEFAULT_DISPLAY
    }
    if (externalDisplays.isNotEmpty()) {
        val options = ActivityOptions.makeBasic().apply {
            launchDisplayId = externalDisplays.first().displayId
        }
        context.startActivity(
            Intent(context, DesktopActivity::class.java),
            options.toBundle()
        )
    }
}

DisplayManager API cho phép phát hiện và sử dụng màn hình ngoài. Đoạn code trên minh họa cách khởi chạy một Activity trên màn hình được kết nối. ActivityOptions với tham số launchDisplayId xác định màn hình đích cụ thể.

Desktop Mode giới thiệu nhiều khái niệm mới mà lập trình viên cần nắm vững. Free-form window management cho phép người dùng sắp xếp cửa sổ tự do. Multi-instance support cho phép nhiều phiên bản của cùng một ứng dụng chạy đồng thời. Keyboard shortcuts integration giúp tăng năng suất làm việc. Quản lý state thông qua ViewModel trở nên cực kỳ quan trọng vì Activity không được mất dữ liệu khi kích thước cửa sổ thay đổi.

Sẵn sàng chinh phục phỏng vấn Android?

Luyện tập với mô phỏng tương tác, flashcards và bài kiểm tra kỹ thuật.

ProgressStyle Notifications: Thông báo tiến trình đa giai đoạn

Android 16 giới thiệu Notification.ProgressStyle, một API mới cho phép hiển thị thông báo tiến trình với nhiều giai đoạn, màu sắc và nhãn khác nhau. Đây là bước tiến lớn so với progress bar đơn giản trước đây.

DeliveryNotificationHelper.ktkotlin
fun buildDeliveryNotification(
    context: Context,
    orderId: String,
    progress: Float,
    currentStep: String
): Notification {
    val style = Notification.ProgressStyle()
        .setStyledByProgress(true)
        .setProgress(progress)
        .setProgressTrackerIcon(
            Icon.createWithResource(context, R.drawable.ic_delivery_truck)
        )
        .addProgressSegment(
            Notification.ProgressStyle.Segment(0.33f)
                .setColor(context, R.color.segment_preparing)
        )
        .addProgressSegment(
            Notification.ProgressStyle.Segment(0.33f)
                .setColor(context, R.color.segment_in_transit)
        )
        .addProgressSegment(
            Notification.ProgressStyle.Segment(0.34f)
                .setColor(context, R.color.segment_delivered)
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(0.0f)
                .setLabel("Order placed")
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(0.33f)
                .setLabel("Preparing")
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(0.66f)
                .setLabel("In transit")
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(1.0f)
                .setLabel("Delivered")
        )

    return Notification.Builder(context, DELIVERY_CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notification)
        .setContentTitle("Order #$orderId")
        .setContentText(currentStep)
        .setStyle(style)
        .setOngoing(true)
        .build()
}

ProgressStyle cung cấp ba thành phần chính. Segment chia progress bar thành các phần với màu sắc tùy chỉnh, phù hợp để biểu thị các giai đoạn khác nhau của quy trình. Point đánh dấu các mốc quan trọng trên progress bar với nhãn mô tả. Progress tracker icon hiển thị biểu tượng di chuyển theo tiến trình, giúp người dùng dễ dàng theo dõi trạng thái hiện tại.

API này đặc biệt hữu ích cho các ứng dụng giao hàng, theo dõi đơn hàng, tải file nhiều phần, hoặc bất kỳ quy trình nhiều bước nào cần thông báo người dùng về tiến độ.

Predictive Back Navigation với Observer mới

Android 16 mở rộng tính năng Predictive Back bằng cách bổ sung PRIORITY_SYSTEM_NAVIGATION_OBSERVER. Priority mới này cho phép lập trình viên quan sát gesture back mà không can thiệp vào luồng điều hướng của hệ thống.

DetailActivity.ktkotlin
class DetailActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (Build.VERSION.SDK_INT >= 36) {
            onBackInvokedDispatcher.registerOnBackInvokedCallback(
                OnBackInvokedDispatcher
                    .PRIORITY_SYSTEM_NAVIGATION_OBSERVER
            ) {
                analyticsTracker.logBackNavigation(
                    screen = "detail"
                )
            }
        }
    }
}

Sự khác biệt giữa PRIORITY_DEFAULTPRIORITY_SYSTEM_NAVIGATION_OBSERVER nằm ở mức độ can thiệp. PRIORITY_DEFAULT sẽ tiêu thụ sự kiện back và ngăn chặn điều hướng hệ thống. PRIORITY_SYSTEM_NAVIGATION_OBSERVER chỉ quan sát mà không ảnh hưởng đến điều hướng. Đây là lựa chọn lý tưởng cho việc thu thập analytics, ghi log hành vi người dùng, hoặc kích hoạt lưu draft tự động.

Lập trình viên cần chuyển từ việc override onBackPressed() sang sử dụng OnBackPressedCallback hoặc OnBackInvokedCallback để đảm bảo tương thích với predictive back animation trên Android 16.

Notification Cooldown và Mandatory Grouping

Android 16 giới thiệu cơ chế notification cooldown để bảo vệ người dùng khỏi việc bị spam thông báo. Khi ứng dụng gửi quá nhiều thông báo trong thời gian ngắn, hệ thống tự động giảm mức độ hiển thị của các thông báo tiếp theo.

Các thông báo bị ảnh hưởng bởi cooldown sẽ không hiển thị heads-up display, không phát âm thanh hoặc rung, và icon trên status bar bị ẩn. Thông báo đầu tiên sau khi cooldown kích hoạt sẽ hiển thị cảnh báo cho người dùng với tùy chọn tắt hoàn toàn thông báo của ứng dụng.

Ngoài ra, việc nhóm thông báo (notification grouping) trở thành bắt buộc. Ứng dụng gửi nhiều thông báo mà không sử dụng setGroup() sẽ thấy thông báo bị hệ thống tự động nhóm lại. Các phương pháp tốt nhất bao gồm áp dụng rate limiting phía ứng dụng, sử dụng notification channels phù hợp, tạo summary notification cho nhóm thông báo liên quan, và hợp nhất thông tin vào một thông báo có thể cập nhật thay vì gửi nhiều thông báo riêng lẻ.

Health Connect FHIR APIs và RangingManager

Android 16 mở rộng Health Connect với hỗ trợ FHIR R4 (Fast Healthcare Interoperability Resources). API mới cho phép ứng dụng sức khỏe đọc và ghi hồ sơ y tế theo định dạng chuẩn quốc tế, bao gồm chẩn đoán, kết quả xét nghiệm, lịch sử tiêm chủng và dữ liệu lâm sàng khác.

RangingManager API cung cấp giao diện thống nhất cho các công nghệ đo khoảng cách bao gồm Ultra-Wideband (UWB), WiFi Round Trip Time (RTT) và Bluetooth Channel Sounding. Lập trình viên không cần quản lý từng công nghệ riêng lẻ; hệ thống tự động chọn phương pháp phù hợp nhất dựa trên khả năng phần cứng của thiết bị. API này đặc biệt hữu ích cho ứng dụng định vị trong nhà, smart home và các tính năng proximity-based.

Câu hỏi phỏng vấn kỹ thuật về Android 16

Dưới đây là những câu hỏi phỏng vấn phổ biến liên quan đến Android 16 và hướng dẫn trả lời:

Câu hỏi 1: Edge-to-Edge enforcement trên Android 16 hoạt động như thế nào và ảnh hưởng gì đến ứng dụng hiện có?

Trả lời: Trên Android 16, mọi ứng dụng target API 36 sẽ tự động hiển thị chế độ edge-to-edge. Nội dung mở rộng ra toàn bộ màn hình bao gồm vùng status bar và navigation bar. Các API cũ như Window.setNavigationBarColor(), Window.setStatusBarColor()fitsSystemWindows không còn hiệu lực. Lập trình viên phải sử dụng enableEdgeToEdge() và WindowInsets API thông qua Scaffold trong Compose hoặc ViewCompat.setOnApplyWindowInsetsListener trong View system để xử lý padding chính xác.

Câu hỏi 2: WindowSizeClass được sử dụng như thế nào để xây dựng layout thích ứng?

Trả lời: WindowSizeClass phân loại kích thước màn hình thành COMPACT, MEDIUM và EXPANDED. Sử dụng currentWindowAdaptiveInfo().windowSizeClass để lấy thông tin và chọn layout phù hợp. COMPACT cho giao diện một cột trên điện thoại, MEDIUM cho layout trung gian với navigation rail, và EXPANDED cho bố cục hai panel trên tablet và desktop. Cách tiếp cận này giúp code dễ đọc và bảo trì hơn so với việc kiểm tra pixel dimensions trực tiếp.

Câu hỏi 3: Desktop Mode hoạt động như thế nào và cần những gì từ phía lập trình viên?

Trả lời: Desktop Mode cho phép ứng dụng chạy trong môi trường desktop với cửa sổ có thể thay đổi kích thước tự do. Ứng dụng cần khai báo PROPERTY_SUPPORTS_MULTI_DISPLAY_SYSTEM_DECORATIONS trong manifest. Lập trình viên phải đảm bảo ứng dụng xử lý configuration changes mà không mất state, hỗ trợ nhiều aspect ratio, và sử dụng ViewModel để quản lý dữ liệu. DisplayManager API cho phép phát hiện và khởi chạy Activity trên màn hình ngoài.

Câu hỏi 4: ProgressStyle notification khác gì so với progress notification truyền thống?

Trả lời: ProgressStyle cho phép chia progress bar thành nhiều segment với màu sắc riêng biệt, đánh dấu các điểm mốc bằng label, và hiển thị tracker icon di chuyển theo tiến trình. Khác với progress notification truyền thống chỉ hiển thị phần trăm đơn thuần, ProgressStyle cung cấp trải nghiệm trực quan hơn cho các quy trình nhiều bước như giao hàng hoặc tải file.

Câu hỏi 5: Làm thế nào để hỗ trợ Predictive Back đúng cách trên Android 16?

Trả lời: Thay vì override onBackPressed() đã bị deprecate, sử dụng OnBackPressedCallback hoặc OnBackInvokedCallback. Với Android 16, có thể đăng ký callback với PRIORITY_SYSTEM_NAVIGATION_OBSERVER để quan sát sự kiện back mà không can thiệp luồng điều hướng, phù hợp cho analytics. Sử dụng PRIORITY_DEFAULT khi cần xử lý và tiêu thụ sự kiện back. Trong Compose, sử dụng PredictiveBackHandler cho animated transitions.

Bắt đầu luyện tập!

Kiểm tra kiến thức với mô phỏng phỏng vấn và bài kiểm tra kỹ thuật.

Kết luận

Android 16 mang đến những thay đổi cơ bản trong cách phát triển ứng dụng Android hiện đại. Dưới đây là tóm tắt các điểm quan trọng:

  • Edge-to-edge enforcement bắt buộc hiển thị toàn màn hình cho mọi ứng dụng target API 36, đòi hỏi xử lý window insets chính xác
  • Mô hình phát hành SDK kép với major release Q2 và minor release Q4 giúp lập trình viên lập kế hoạch cập nhật hiệu quả hơn
  • Ứng dụng thích ứng bắt buộc xóa bỏ giới hạn hướng màn hình trên thiết bị lớn, yêu cầu mọi ứng dụng hoạt động tốt trên nhiều form factor
  • Desktop Mode mở ra khả năng sử dụng Android như máy tính để bàn với hỗ trợ windowing và multi-display
  • ProgressStyle notifications cung cấp hiển thị tiến trình đa giai đoạn với segment, point và tracker icon
  • Predictive back observer hỗ trợ thu thập analytics điều hướng mà không ảnh hưởng trải nghiệm người dùng
  • Health Connect FHIRRangingManager mở rộng khả năng nền tảng cho lĩnh vực sức khỏe và định vị

Việc chuẩn bị sớm cho Android 16 không chỉ giúp ứng dụng sẵn sàng khi người dùng nâng cấp mà còn tạo lợi thế đáng kể trong các buổi phỏng vấn kỹ thuật. Nhà tuyển dụng đánh giá cao ứng viên có kiến thức cập nhật và khả năng thích ứng với những thay đổi của nền tảng Android.

Bắt đầu luyện tập!

Kiểm tra kiến thức với mô phỏng phỏng vấn và bài kiểm tra kỹ thuật.

Thẻ

#android
#android-16
#mobile
#interview

Chia sẻ

Bài viết liên quan