Android Lifecycle

Android có rất nhiều các components như Activity, Fragment, Service, BroadCastReceiver ... Mỗi thành phần đều có vòng đời của riêng chúng và có những thành phần mà vòng đời của chúng liên quan đến nhau. Việc hiểu được lifecycle của các components trong android sẽ giúp tránh được các lỗi thường gặp.

Vòng đời của một Activity

App is finished and restarted

Trường hợp này xảy ra khi người dùng ấn vào back button hoặc ứng dụng gọi Activity.finish()

  • method onSaveInstanceState sẽ không được gọi vì Activity lúc này đã finished
  • Khi ứng dụng được mở lại thì hàm onCreate sẽ nhận đối số Bundle = null.

User navigates away

Khi người ấn home button hoặc lựa chọn mở một ứng dụng khác

  • Method onSaveInstanceState sẽ được gọi để lưu trạng thái của ứng dụng để sử dụng khi Activity bị destroy.

Configuration changes

Khi người dùng quay màn hình hoặc screen size bị thay đổi

  • Activity bị huỷ và trạng thái của activity được lưu lại khi tạo một instance mới . Hệ thống gọi 2 hàm onSaveInstanceState và onRestoreInstanceState.
  • Hàm onCreate được gọi khi activity khởi tạo lại có Bundle != null

App is paused by the system

Một thành phần của ứng dụng khác hiển thị lên trên ứng dụng đang chạy như dialog request permission hay share dialog (Trường hợp show dialog của ứng dụng đang chạy hay xem notification từ menu không thuộc trường hợp này)

Multiple activities

Navigating between activities

Trường hợp start một Activity mới và người dùng ấn back button để destroy activity 2 .

  • Hệ thống gọi hàm onSaveInstanceState nhưng không gọi onRestoreInstanceState

Activities in the back stack with configuration changes

  • Tất cả các activity trong back stack đều cần restore state trong trường hợp configuration change

App’s process is killed

Trường hợp khi hệ thống cần tài nguyên, hệ thống sẽ kill apps trong background

  • Tất cả các activity trong back stack đều được lưu lại trạng thái .

Fragments

Activity with Fragment starts and finishes

  • onCreate của Activity luôn được thực hiện trước nhưng một số hàm tương ứng như onStart, onResume... có thể thực hiện theo thứ tực khác nhau không phải lúc nào hàm của Activity cũng được gọi trước.

Activity with Fragment is rotated

  • Fragment được save và restore state tương tự như Activity chỉ có một điểm khác là trong fragment không có hàm onRestoreInstanceState. Bundle != null tại onCreate, onCreateView, onActivityCreated.

Tham khảo: