- vừa được xem lúc

[Android] Lifecycle của Activity và Fragment

0 0 29

Người đăng: Ankun

Theo Viblo Asia

Activity Lifecycle

Activity là lớp cơ bản để xây dựng ứng dụng Android. Khi người dùng tương tác với ứng dụng, có thể có nhiều trường hợp xảy ra như: chuyển, đóng, ẩn, thay thế Activity. Điều này sẽ tạo ra nhiều thay đổi về mặt trạng thái đối với Activity mà người dùng vừa tương tác. Do đó ta được cung cấp một số callback nhằm phục vụ việc quản lí Activity dễ dàng hơn hay còn được gọi là Activity Lifecycle.

Các trạng thái của Activity:

  • Created
  • Started
  • Resumed
  • Paused
  • Stopped
  • Destroyed activitylifecycle.png

onCreate

Được gọi khi khởi tạo activity, lúc này người dùng vẫn chưa nhìn thấy và tương tác được với activity (trạng thái INITIALIZED). Ta bắt buộc phải hiện thực phương thức này khi tạo activity:

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Some thing
}

onCreate là nơi ta thực hiện các thao tác:

  • Bind data tới một list
  • Init một vài biến thuộc class scope
  • Lấy giá trị bundle được gửi tới thông qua intent
  • Liên kết activty với ViewModel
  • ...

Ngoài ra onCreate có param là một bundle onCreate(savedInstanceState: Bundle?) chứa giá trị liên quan đến trạng thái đã được lưu lần trước của activity (sẽ được nói đến ở các phần tiếp theo).

Khi thực hiện xong function onCreate activity của chuyển sang trạng thái CREATED.

onStart

Khi activity đi vào trạng thái STARTED, onStart sẽ được gọi nhằm mục đích chuẩn bị đưa activity lên foreground, hiển thị cho người dùng. Phương thức này được thược hiện rất nhanh và trong body của phương thức này, activity sẽ không giữ trạng thái STARTED mà sẽ là CREATED. Khi thực hiện xong, activity sẽ chuyển sang RESUMED.

Một trong những chức năng thường được đặt ở onStart là preview, xem trước Camera.

onResume

Activity ở RESUMED sẽ gọi callback onResume. Ở trạng thái này người dùng có thể tương tác trực tiếp activity và RESUMED sẽ được giữ cho đến khi có những thay đổi về mặt "focus" chẳng hạn như: người dùng chuyển đến activity khác, nhận được cuộc gọi, tắt màn hình.

onResume có thể được gọi nhiều lần trong suốt chương trình:

  • onCreate > onStart > onResume
  • onPause > onResume
  • onStop > onRestart > onStart > onResume

Thường được dùng để thực hiện các thao tác:

  • Start camera preview

onPause

Khi onPause được gọi là dấu hiệu cho biết người dùng đã "rời khỏi" activity (không có nghĩa là bị huỷ) hay nói cách khác là activity hiện tại đã bị event interrupts app execution bởi activity khác. Lúc này activity chuyển sang trạng thái PAUSED.

Một số trường hợp khiến activity chuyển đến trạng thái này

  • Một vào thao tác gây lỗi, treo ứng dụng
  • Activity bị che khuất một phần bởi activity khác

Ở trạng thái PAUSED này, ta thường sẽ xử lí các hoạt động để hoàn lại tại nguyên không sử dụng như GPS, NFC...

onStop

Được gọi khi activity không còn được nhìn thấy bởi user nữa có nghĩa là nó đã bị che lấp hoàn toàn. Xảy ra khi người dùng chuyển màn hình (activity), chuyển ứng dụng, bấm home. onStop thường được dùng để:

  • Lữu trữ dữ liệu
  • Cancel các job như gọi API, truy xuất dữ liệu local
  • Giải phóng các tài nguyên sử dụng

onDestroy

Là lời gọi kết thúc cho một activity, thường dùng để giải phóng các tài nguyên (các phần mà onStop chưa xử lí). onDestroy sẽ được gọi khi:

  • Người dùng kết thúc, dừng activty
  • Gọi finish() trong activity
  • System gọi vì có thay đổi liên quan đến config như: xoay thiết bị hoặc bật multi wind

Kịch bản thực tế

  • Khi mở ứng dụng khác từ thanh thông báo hoặc mở trong cài đặt: onPaused() –> onStop()
  • Khi nhấn nút back từ ứng dụng khác hoặc cài đặt từ người dùng có thể nhìn thấy ứng dụng bạn: onRestart() –> onStart() –> onResume()
  • Khi có một thông báo mở trong màn hình: onPause()
  • Sau khi tắt thông báo hoặc nhấn nút back từ thông báo: onResume()
  • Khi điện thoại đổ chuông và người dùng đang sử dụng ứng dụng:* onPause() –> onResume()*
  • Khi người dùng nhấn nút trả lời trên điện thoại: onPause()
  • Sau khi cuộc gọi kết thúc: onResume()
  • Khi điện thoại tắt màn hình: onPaused() –> onStop()
  • Khi màn hình được bật lại: onRestart() –> onStart() –> onResume()
  • Khi bắt đầu mở ứng dụng: onCreate() –> onStart() –> onResume()
  • Khi nhấn nút quay lại và thoát ứng dụng: onPaused() — > onStop() –> onDestory()
  • Khi nhấn nút home: * onPaused() –> onStop()*
  • Sau khi nhấn nút home và quay lại mở ứng dụng từ danh sách hoặc nhấp vào biểu tượng ứng dụng: onRestart() –> onStart() –> onResume()

Fragment Lifecycle

Tương tự như Activity, ở Fragment cũng có các callback và trạng thái:

image.png

  • onAttach: fragment được attach vào host activity.
  • onCreate: luôn gọi sau khi fragment được attach, khởi đầu cho fragment
  • onCreateView: khời tạo thành phần view và add nó vào activity
  • onActivityCreated: activty thực thi xong onCreate
  • onStart: fragment được hiển thị
  • onResume: fragment hiển thị và tương tác được
  • onPause: fragment không còn tương tác được, Xảy ra khi fragment sắp bị thay thế, xoá hoặc activty ở pause
  • onStop: fragment không còn được hiển thị. Vì nó bị xoá, thay thế hoặc activty ở stop
  • onDestroyView: view và tài nguyên tạo ra ở onCreateView bị xoá khỏi activty
  • onDestroy: huỷ hoàn toàn fragment
  • onDetach: detach fragment khỏi activity

Mối liên hệ

image.png

Lời kết

Trên là những khái niệm cũng như các cách sử dụng của activity life cycle và fragment life cycle. Bạn có thể tìm hiểu thêm: về activtyfragment.

Cảm ơn các bạn đã đọc bài viết.

Reference

  1. https://tutorial.eyehunts.com/android/android-activity-lifecycle-example-kotlin/
  2. https://viblo.asia/p/android-activity-lifecycle-trong-kotlin-naQZRYJ0Kvx

Bình luận

Bài viết tương tự

- vừa được xem lúc

[Android] Hiển thị Activity trên màn hình khóa - Show Activity over lock screen

Xin chào các bạn, Hôm nay là 30 tết rồi, ngồi ngắm trời chờ đón giao thừa, trong lúc rảnh rỗi mình quyết định ngồi viết bài sau 1 thời gian vắng bóng. .

0 0 107

- vừa được xem lúc

Cách đặt log hiệu quả trong Android

Đặt Log đôi khi có thể được coi là công cụ được sử dụng như một phương sách cuối cùng. Bạn viết rất nhiều dòng log như "being here", "user=23939", v.v. và xóa mọi thứ ngay khi bạn hiểu nguyên nhân gốc rễ của lỗi.

0 0 107

- vừa được xem lúc

Lưu trữ dữ liệu an toàn trên Android

Độ tin cậy của ứng dụng ngày nay phụ thuộc rất nhiều vào cách dữ liệu cá nhân của người dùng được quản lý như thế nào. Loạt bài ngắn này sẽ bắt đầu với cách tiếp cận đơn giản để bắt đầu và chạy, bằng

0 0 28

- vừa được xem lúc

Excel at Cashiering with the McDonald's POS Training Simulator APK!

Excel at Cashiering with the McDonald's POS Preparing Test system APK. Might it be said that you are hoping to improve your abilities as a clerk? Look no further! Mcdonalds pos training game is here t

0 0 20

- vừa được xem lúc

Tìm hiểu về Android Context

Bạn có thực sự hiểu Android Context. Nhưng trước hết, hãy nói một chút về Java.

0 0 13

- vừa được xem lúc

Vòng đời của Activity và Fragment trong Android

Vòng đời hoạt động của Acvivity và Fragment. 1. Các trạng thái cơ bản. Activity và Fragment có 4 trạng thái cơ bản:.

0 0 58