Khi mới bắt đầu học lập trình Android với Java, một trong những câu hỏi phổ biến nhất là: "Khi nào tôi nên dùng Activity, khi nào dùng Fragment?" Bài viết này sẽ giúp bạn hiểu rõ bản chất của từng thành phần và đưa ra quyết định đúng đắn trong từng tình huống.
Activity Là Gì?
Một Activity đại diện cho một màn hình duy nhất trong ứng dụng Android. Đây là entry point để người dùng tương tác với ứng dụng. Mỗi Activity có vòng đời (lifecycle) riêng được hệ thống Android quản lý.
Vòng Đời Của Activity
onCreate()– Khởi tạo Activity, inflate layoutonStart()– Activity trở nên hiển thịonResume()– Activity ở foreground, người dùng tương tác đượconPause()– Activity bắt đầu bị che khuấtonStop()– Activity không còn hiển thịonDestroy()– Activity bị hủy hoàn toàn
Fragment Là Gì?
Một Fragment là một phần giao diện người dùng có thể tái sử dụng và được nhúng bên trong một Activity. Fragment có vòng đời riêng nhưng bị ràng buộc với vòng đời của Activity chứa nó.
Các Callback Đặc Trưng Của Fragment
onAttach()– Fragment gắn vào ActivityonCreateView()– Tạo và inflate layout của FragmentonViewCreated()– View đã được tạo xong, thích hợp để thiết lập UIonDestroyView()– View bị hủy nhưng Fragment vẫn tồn tạionDetach()– Fragment tách khỏi Activity
Bảng So Sánh Activity vs Fragment
| Tiêu chí | Activity | Fragment |
|---|---|---|
| Độc lập | Hoàn toàn độc lập | Phụ thuộc vào Activity |
| Tái sử dụng | Khó tái sử dụng | Dễ tái sử dụng |
| Back Stack | Được OS quản lý | Được FragmentManager quản lý |
| Giao tiếp | Qua Intent | Qua ViewModel hoặc interface |
| Màn hình lớn | Kém linh hoạt | Hỗ trợ multi-pane tốt |
Khi Nào Nên Dùng Activity?
- Màn hình hoàn toàn độc lập (ví dụ: màn hình đăng nhập, splash screen)
- Điểm vào của ứng dụng (
MainActivity) - Khi cần launch từ bên ngoài qua Intent (deep link, notification)
- Ứng dụng đơn giản với ít màn hình
Khi Nào Nên Dùng Fragment?
- Ứng dụng có Navigation Drawer hoặc Bottom Navigation
- Cần hiển thị multi-pane trên tablet
- Các phần UI có thể tái sử dụng trong nhiều màn hình
- Wizard/Stepper nhiều bước trên cùng một màn hình
Kiến Trúc Hiện Đại: Single Activity Architecture
Google khuyến nghị áp dụng mô hình Single Activity Architecture kết hợp với Navigation Component. Trong mô hình này, toàn bộ ứng dụng chỉ có một Activity duy nhất (MainActivity), và mọi màn hình đều là Fragment. Điều này mang lại:
- Quản lý điều hướng tập trung và dễ dàng hơn
- Chia sẻ ViewModel giữa các Fragment đơn giản hơn
- Animation chuyển màn hình nhất quán hơn
- Back stack được quản lý tự động
Kết Luận
Không có câu trả lời tuyệt đối cho việc chọn Activity hay Fragment — tất cả phụ thuộc vào kiến trúc ứng dụng của bạn. Tuy nhiên, với xu hướng hiện nay, hãy ưu tiên Fragment kết hợp Navigation Component cho các ứng dụng có nhiều màn hình để code dễ bảo trì và mở rộng hơn.
]]>