Vòng đời Acivity trong android cơ bản

5/5 - (5 votes)

Đi nhanh qua Process và thành phần App

Tổng quan về Activity

  • 1 App có nhiều Activity (bên cạnh đó còn có Services, Fragment, Loaders…) -> 1 Activity có 1 vòng đời  -> 1 vòng đời có nhiều sự kiện như onCreate, onDestroy…
Vòng đờiActivity và sự kiện đi kèm.
Vòng đời Activity và sự kiện đi kèm.
 

Dưới đây là Log vòng đời của Activity như sau:

1. Khi khởi động app:

onCreate
onStart
onResume

2. Khi ấn recent:

onPause
onSaveInstanceStateBundle[{}]
onStop

3. Khi mở lại ngay trong trạng thái Recent:

onRestart
onStart
onResume

4. Khi ra Home

onPause
onSaveInstanceStateBundle[{}]
onStop
=> Tương tự khi nhấn Recent để chuyển sang app khác hay chỉ muốn xem có những app nào đang chạy.

5. Khi mở lại app bằng recent:

onRestart
onStart
onResume

6. Khi mở lại app bằng chọn app trên màn hình thì giống với khi mở lại app bằng recent.

7. Khi tắt app bằng nút back:

onPause
onStop
onDestroy

8 Khi tắt app bằng Recent

onDestroy

9 Khi xoay màn hình.

onPause
onSaveInstanceStateBundle[{}]
onStop
onDestroy
onCreate
onStart
onRestoreInstanceStateBundle
onResume

10. Tắt màn hình tối đi (sleep) bằng nút nguồn

onPause

Trước khi gọi super onSaveInstanceState Bundle[{}]
Sau khi gọi super onSaveInstanceState Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@bea65d1, 2131427422=android.view.AbsSavedState$1@bea65d1, 2131427423=android.view.AbsSavedState$1@bea65d1, 2131427424=android.view.AbsSavedState$1@bea65d1, 2131427425=android.view.AbsSavedState$1@bea65d1}}]}]

onStop

11 Khi bật lại màn hình

onRestart
onStart
onResume

Khi lưu trạng thái cần chú ý:

– Có thể check trạng thái ở hàm onRestoreInstanceState (override nó)
– Có thể check trạng thái ở onCreate cũng được
– Để test 2 hàm onSaveInstanceState và onRestoreInstanceState chạy khi nào chỉ cần xoay màn hình.
– Luôn gọi super.onSaveInstanceState sau đó mới lưu State.
– Muốn lưu dữ liệu thường xuyên và tránh bị  mất khi app crash nên dùng hàm onPause().
– onSaveInstanceState để lưu UI như EditText, CheckBox,…

 Bài tập và đáp án

1) Activity (Sử dụng điện thoại Android để mô tả trạng thái vòng đời của Activity, nên dùng device thật)

(1.1) Khi ấn Home thì lifecycle của Activity thay đổi như thế nào?

=> Tạm dừng Foreground Process bằng onPause() để vào Background Process với onStop().

(1.2) Đang ở trong Activity mà có 1 app khác pop lên trên (ví dụ: có cuộc gọi tới) thì lifecyle của Acitivty thay đổi như thế nào?

=> sẽ vào chế độ Foreground Process bằng onPause() và khi popup tắt sẽ vẫn ở Foreground Process và gọi sự kiện onResume()

(1.3) Khi click back button thì vòng đời của Activity thay đổi như thế nào?

=> nếu chỉ còn 1 Activity thì sẽ xóa Activity đó khỏi stack và đóng app. Nếu có nhều Activity thì sẽ mở lại Activity trong stack.

(1.4) Khi giữ Home button -> recently app -> mở app: thì vòng đời của Activity thay đổi như thế nào?

(1.5) Trong vòng đời của Activity onStop() và onDestroy() có luôn được gọi không? Vì sao? Kể tên những trạng thái chắc chắn được gọi?

(1.6) Muốn save 1 giá trị nào đó (vào SharedPreference chẳng hạn) thì sẽ save trong vòng đời nào của Activity khi Activity bị hủy thì mới chắc chắn 100% save được?

=> trong onPause();

(1.7) onSaveInstance() dùng để làm gì?  Viết demo. Tham khảo: link

=> Để lưu trạng thái ứng dụng như dữ liệu người dùng nhập vào. Ví dụ lúc xoay màn hình thì activity sẽ bị xóa khỏi bộ nhớ và tạo lại từ onCreate. Lúc xoay dữ liệu sẽ mất hoàn toàn.

(Chú ý: sử dụng onSaveInstance() rất quan trọng nên cần hiểu rõ và sử dụng thành thạo)

(1.8) Vẽ lại lifecycle của Activity.

(1.9) Viết demo sử dụng startActivityForResult(…), Viết ứng dụng start 1 Activity khác và lấy dữ liệu từ Activity đó.

Tham khảo

(1.10) Khi Activity A start Activity B bằng startActivityForResult(..) sau đó B trả về data cho A thì lifecyle của Activity thay đổi như thế nào?

=> Activity đó sẽ vào chế độ (tiến trình) background bằng hàm onPause và onStop. Khi trở về nó sẽ trở lại Foreground theo trình tự onActivityResult -> onRestart -> onStart -> onResume. Xem lại phần bên trên


Các bài viết không xem thì tiếc:

Thảo luận

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Xem thêm
Báo giá nâng cấp - thêm/sửa chức năng cho web…
 
 
 
 
Facetime iPhone

Main Menu