Android Lifecycle
Bài đăng này đã không được cập nhật trong 6 năm
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:
All rights reserved