Activity và Fragment: Hai Thành Phần Cốt Lõi Của Android

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

  1. onCreate() – Khởi tạo Activity, inflate layout
  2. onStart() – Activity trở nên hiển thị
  3. onResume() – Activity ở foreground, người dùng tương tác được
  4. onPause() – Activity bắt đầu bị che khuất
  5. onStop() – Activity không còn hiển thị
  6. 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 Activity
  • onCreateView() – Tạo và inflate layout của Fragment
  • onViewCreated() – View đã được tạo xong, thích hợp để thiết lập UI
  • onDestroyView() – View bị hủy nhưng Fragment vẫn tồn tại
  • onDetach() – Fragment tách khỏi Activity

Bảng So Sánh Activity vs Fragment

Tiêu chíActivityFragment
Độc lậpHoàn toàn độc lậpPhụ thuộc vào Activity
Tái sử dụngKhó tái sử dụngDễ tái sử dụng
Back StackĐược OS quản lýĐược FragmentManager quản lý
Giao tiếpQua IntentQua ViewModel hoặc interface
Màn hình lớnKém linh hoạtHỗ 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.

]]>