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

Vòng đời Acivity trong android cơ bản
5 (100%) 5 votes

Mình là newbie hoàn toàn với Android vì vậy việc gặp khó khăn là không thể tránh khỏi, đây là 1 trong những bài viết để trace lại những nơi mình đã đi qua và những gì mình đã làm. Haiz mấy ngày nay tìm hiểu cái In-App Purchase mãi mà chưa làm được nhục vl  :rap:

Đ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={[email protected], [email protected], [email protected], [email protected], [email protected]}}]}]

onStop

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

onRestart
onStart
onResume

Sponsored by dotrinh

Download  Free Premium 1200 Japanese Phrase  App for Android

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


Update

Đô đã làm được In App Billing rồi =))

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

Chia sẻ là sexy

Đô Trịnh

Một lập trình viên vui vẻ, hòa đồng, luôn sống tích cực và anh ấy quay tay khỏe và khéo trong môn bi lắc :)

Bình luận qua khung của website

Bình luận lời hay ý đẹp!

Nhận thông báo:
avatar
wpDiscuz