Multi-Window: bản chất của các chế độ đa nhiệm trên Android

Tác giả: IT Sectr Đã đăng: 2026-06-08 Thời gian đọc: 10 phút

Multi-Window là một tập hợp các chế độ đa nhiệm trong Android cho phép chạy nhiều ứng dụng trên màn hình cùng lúc. Hệ thống bao gồm ba chế độ: Split Screen để chia màn hình thành hai phần, Picture-in-Picture cho video trong cửa sổ nhỏ và Freeform cho các cửa sổ có kích thước tùy ý trên màn hình lớn. Theo Android Developers (2025), hỗ trợ Multi-Window là bắt buộc đối với thiết bị có chiều rộng màn hình từ 600 dp trở lên và mọi nhà phát triển phải điều chỉnh ứng dụng của mình cho các thay đổi kích thước cửa sổ có thể xảy ra.

Những điểm chính

  • Multi-Window — hệ thống đa nhiệm Android với ba chế độ: Split Screen, PiP, Freeform.
  • Split Screen — hai ứng dụng cạnh nhau, thanh chia có thể kéo, tỷ lệ thay đổi.
  • Picture-in-Picture — video trong cửa sổ nhỏ trên các ứng dụng khác.
  • Freeform — cửa sổ kích thước tùy ý trên Android TV và màn hình lớn.
  • ResizeableActivity — cờ trong tệp kê khai để khai báo hỗ trợ đa cửa sổ.

Multi-Window trong Android là gì?

Multi-Window là một tính năng của Android được giới thiệu trong phiên bản 7.0 Nougat (API 24) cho phép chạy hai hoặc nhiều ứng dụng trên màn hình cùng lúc. Chế độ này là phản ứng của Google trước sự phổ biến ngày càng tăng của máy tính bảng và thiết bị màn hình lớn, nơi chế độ một tác vụ hạn chế năng suất.

Trước Android 7.0, mỗi ứng dụng chiếm toàn bộ màn hình — khi chuyển đổi giữa các ứng dụng, ứng dụng trước đó bị thu nhỏ. Multi-Window đã thay đổi mô hình này: giờ đây một ứng dụng có thể chiếm một phần màn hình trong khi vẫn duy trì trạng thái hoạt động. Đối với nhà phát triển, điều này có nghĩa là onConfigurationChanged và xử lý thay đổi kích thước trở thành bắt buộc.

Trên Android 12L (2022), Google đã đặt Multi-Window làm chế độ mặc định cho các thiết bị màn hình lớn — tất cả ứng dụng trên máy tính bảng chạy ở chế độ cho phép đa cửa sổ. Ngoại lệ duy nhất là các ứng dụng có lệnh cấm rõ ràng trong tệp kê khai.

Chế độ Multi-Window: Split Screen, PiP, Freeform

Split Screen — chế độ phổ biến nhất. Màn hình được chia thành hai phần theo chiều ngang hoặc chiều dọc, người dùng kéo thanh chia. Có sẵn trên điện thoại và máy tính bảng. Được kích hoạt qua Overview (Recents) — bằng cách kéo biểu tượng ứng dụng đến cạnh trên hoặc dưới.

Picture-in-Picture (PiP) — chế độ dành cho ứng dụng video và điều hướng. Nội dung được hiển thị trong cửa sổ nhỏ nổi (khoảng 15–25% màn hình) có thể di chuyển được. Có sẵn trên Android 8.0+. Để kích hoạt, sử dụng enterPictureInPictureMode() trong Activity.

Freeform — chế độ cho cửa sổ kích thước tùy ý, tương tự như trình quản lý cửa sổ trên máy tính. Có sẵn trên Android TV và một số thiết bị màn hình lớn của nhà sản xuất (Samsung DeX). Các ứng dụng chạy trong cửa sổ có thanh tiêu đề và nút điều khiển.

Multi-Window hoạt động như thế nào

Khi người dùng kích hoạt Multi-Window, Android tạo một phiên bản Activity mới cho mỗi ứng dụng và phân phối không gian màn hình có sẵn. Các Activity được đặt trong các Task riêng biệt nhưng sử dụng cùng một StackView với thanh chia giữa chúng.

Hệ thống thông báo cho mỗi Activity về sự thay đổi kích thước thông qua onConfigurationChanged(). Nếu Activity không xử lý sự kiện này, nó sẽ được tạo lại. Đối với Split Screen, chiều rộng cửa sổ có thể giảm xuống 220 dp — chiều rộng tối thiểu được nền tảng hỗ trợ.

Android cho phép ứng dụng khai báo chiều rộng tối thiểu thông qua android:minWidthandroid:minHeight trong tệp kê khai. Nếu không gian có sẵn nhỏ hơn các giá trị này, Activity sẽ chuyển sang trạng thái tạm dừng.

Điều chỉnh Activity cho chế độ đa cửa sổ

Để hỗ trợ Multi-Window, bạn cần đặt cờ android:resizeableActivity="true" trong tệp kê khai. Điều này có nghĩa là ứng dụng có thể thay đổi kích thước khi cửa sổ thay đổi. Theo mặc định trên Android 12L+, tất cả ứng dụng được coi là có thể thay đổi kích thước — cờ bị bỏ qua.

Khi kích thước cửa sổ thay đổi, Activity có thể được tạo lại (mặc định) hoặc xử lý sự kiện trong onConfigurationChanged nếu configChanges="screenSize|smallestScreenSize" được chỉ định trong tệp kê khai. Nên chỉ định configChanges cho các Activity chính để tránh mất trạng thái.

xml
<activity
    android:name=".MainActivity"
    android:resizeableActivity="true"
    android:configChanges="screenSize|smallestScreenSize|orientation" />

Đối với ứng dụng không hỗ trợ thay đổi kích thước, Android hiển thị hộp thoại cảnh báo. Trong trường hợp này, khi chuyển sang chế độ đa cửa sổ, hệ thống có thể kết thúc Activity và hiển thị snackbar với đề nghị khởi động lại.

Multi-Window và vòng đời Activity

Multi-Window thay đổi vòng đời Activity tiêu chuẩn. Khi một ứng dụng khác trở nên hoạt động trong cửa sổ liền kề, Activity hiện tại nhận được lệnh gọi onPause() nhưng không phải onStop() — nó vẫn hiển thị, mặc dù không được tiêu điểm. Điều này quan trọng: trình phát video nên tiếp tục phát ở onPause, không phải ở onStop.

Nhà phát triển cần phân biệt giữa các trạng thái: onPause + isInMultiWindowMode() = true có nghĩa là chỉ mất tiêu điểm, không phải rời khỏi màn hình. Đối với video và hoạt ảnh, đây là tín hiệu không dừng phát mà chỉ bỏ chọn các phần tử điều khiển.

Khi thoát Multi-Window, onMultiWindowModeChanged() được gọi trước onResume(). Điều này cho cơ hội xây dựng lại giao diện cho chế độ toàn màn hình trước khi người dùng bắt đầu tương tác.

Thực hành tốt nhất cho Multi-Window

Quy tắc đầu tiên là lưu trạng thái. Trong chế độ đa cửa sổ, Activity có thể được tạo lại bất kỳ lúc nào. Sử dụng SavedStateHandle trong ViewModel hoặc onSaveInstanceState cho tất cả dữ liệu cần duy trì giữa các thay đổi cấu hình.

Quy tắc thứ hai là kiểm thử ở chiều rộng tối thiểu 220 dp. Giá trị này được coi là cửa sổ hẹp nhất trong Split Screen. Giao diện phải duy trì tính dễ đọc và chức năng. Nếu một số phần tử vượt quá giới hạn, hãy sử dụng Window Size Class để chuyển đổi giữa các bố cục.

Quy tắc thứ ba là vô hiệu hóa các chức năng không hoạt động trong Multi-Window. Ví dụ, Camera có thể không khả dụng nếu màn hình quá nhỏ. Hãy kiểm tra isInMultiWindowMode() trước khi khởi động camera hoặc các chức năng toàn màn hình khác.

Các câu hỏi thường gặp

Làm thế nào để vô hiệu hóa Multi-Window cho ứng dụng của tôi?

Đặt android:resizeableActivity="false" trong tệp kê khai. Trên Android 12L+, cờ bị bỏ qua đối với thiết bị màn hình lớn, vì vậy để cấm hoàn toàn hãy sử dụng android:maxAspectRatio.

Làm thế nào để xác định ứng dụng có đang ở chế độ Multi-Window?

Gọi isInMultiWindowMode() từ Activity. Phương thức trả về true nếu ứng dụng đang chạy ở chế độ Split Screen, PiP hoặc Freeform. Bạn cũng có thể đăng ký theo dõi onMultiWindowModeChanged().

Multi-Window có hoạt động trên Android TV không?

Trên Android TV, chỉ có chế độ Picture-in-Picture khả dụng. Split Screen và Freeform không được hỗ trợ — TV sử dụng một màn hình chính với cửa sổ PiP ở góc.

Điều gì xảy ra với dịch vụ nền trước trong Multi-Window?

Dịch vụ nền trước tiếp tục hoạt động bất kể chế độ nào. Tuy nhiên, nếu ứng dụng chuyển sang PiP, hệ thống có thể tạm dừng thực thi để tiết kiệm tài nguyên.

Làm thế nào để xử lý kéo và thả giữa các cửa sổ?

Android hỗ trợ kéo và thả giữa các cửa sổ trong Multi-Window thông qua ClipData và View.OnDragListener. Dữ liệu được truyền qua ContentProvider hoặc Intent với FLAG_GRANT_READ_URI_PERMISSION.

Tóm tắt

  • Multi-Window — đa nhiệm Android với ba chế độ cho công việc ứng dụng đồng thời.
  • Split Screen — chia màn hình thành hai phần với thanh chia có thể kéo.
  • Picture-in-Picture — video trong cửa sổ nhỏ cho Android 8.0+.
  • Freeform — cửa sổ kích thước tùy ý trên Android TV và Samsung DeX.
  • resizeableActivity — cờ bắt buộc trong tệp kê khai để hỗ trợ chế độ.
  • onMultiWindowModeChanged — callback để xây dựng lại giao diện khi vào/ra.
  • Kết luận — Multi-Window bắt buộc cho tất cả ứng dụng trên màn hình lớn từ 2022.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm