[Tự học lập trình Android] Bài 6: Tìm hiểu về vòng đời của ứng dụng Android (Application life cycle)

Tìm hiểu về vòng đời của ứng dụng Android (Application life cycle)
1) Applications là gì ?
Mỗi một Android Project khi bạn biên dịch thành công thì sẽ được đóng gói thành tập tin .apk, tập tin .apk được gọi là một ứng dụng (application)
2) Activities là gì ?
- Trong một ứng dụng (application) sẽ có một hoặc nhiều Activity (có thể hiểu như là các màn hình tương tác giống như Form trong VS.Net).
- Mỗi một Activity này sẽ có một vòng đời riêng độc lập hoàn toàn với các Activity khác. Việc hiểu rõ vòng đời của Activity là rất quan trọng trong việc xử lý thông tin.
- Mỗi một Activity muốn được triệu gọi trong ứng dụng thì bắt buộc nó phải được khai báo trong file Manifest.XML
3) Activity Stack là gì?
- Tương tự như các ngôn ngữ lập trình khác, Activity Stack hoạt động theo cơ chế LIFO (Last In Firrst Out)
- Mỗi một Activity mới được mở lên nó sẽ ở bên trên Activity cũ, để trở về Activity thì bạn chỉ cần nhấn nút “Back” để trở về hoặc viết lệnh. Tuy nhiên nếu bạn nhấn nút "Home" rồi thì sẽ không thể dùng nút “Back” để quay lại màn hình cũ được.
Hình 1: Acitivity stack

- Có 2 kiểu mở Activity mới:
  + Mở Activity mới lên làm che khuất toàn bộ Activity cũ (không nhìn thấy Activity cũ): sảy ra sự kiện onPause rồi onStop đối với Activity cũ
  + Mở Activity mới lên làm che khuất một phần Activity cũ (vẫn nhìn thấy Activity cũ): Sảy ra sự kiện onPause với Activity cũ.
- Khi quay trở về Activity cũ thì sau khi thực hiện xong các hàm cần thiết, chắc chắn nó phải gọi hàm onResume để phục hồi lại trạng thái ứng dụng
- Như vậy ta thường lưu lại trạng thái của ứng dụng trong sự kiện onPause và đọc lại trạng thái ứng dụng trong sự kiện onResume
4) Tasks là gì?
- Task là khả năng thực hiện một công việc nào đó giữa các ứng dụng với nhau, cụ thể là các Activity
- Ví dụ bạn đang mở chương trình quản lý BlackList, trong chương trình này cho phép mở danh bạ để đưa vào danh sách đen. Lúc đó chương trình bạn sẽ gọi Activity của ứng dụng danh bạ, sau khi lấy xong lại quay trở về ứng dụng của bạn. Nhớ là 2 ứng dụng này hoàn toàn không liên quan gì tới nhau cả.

Hình 2: Task

5) Life Cycle States là gì?
Với mỗi Activity thường vòng đời có 3 trạng thái sau:
1- Running (đang kích hoạt)
2- Paused (tạm dừng)
3- Stopped (dừng – không phải Destroyed)
Hình 3: Life Cycle 


Trong đó:
1- Running (đang kích hoạt): Khi màn hình là ForeGround (Activity nằm trên cùng ứng dụng và cho phép người sử dụng tương tác)
2- Paused (tạm dừng): Activity bị mất trọng tâm (focus) nhưng mà vẫn nhìn thấy được Activity này (Ví dụ bạn mở một Activity mới lên dưới dạng Dialog). Trường hợp này nó vẫn có khả năng bị hệ thống tự động hủy trong tình huống bộ nhớ quá ít.
3- Stopped (dừng – không phải Destroyed): Activity mất focus và không nhìn thấy được (ví dụ bạn mở một Activity mới lên mà Full màn hình chẳng hạn). Trong trường hợp này nó có thể bị hệ thống hủy bất kỳ tình huống nào.
Hình 4: Application's Lifie cycle

* Như vậy cả Paused hay Stopped đều có khả năng bị Destroyed (hủy) khi bộ nhớ cần cho việc khác ưu tiên hơn.


6. Phân biệt Visible Lifetime và Foreground Lifetime
Hình 5: Phân biệt Visible Lifetime và Foreground Lifetime

- Visible Lifetime:
+ sảy ra từ sau khi gọi onStart => cho tới lúc gọi onStop: trong trường hợp này chúng ta vẫn có thể thấy màn hình Activity (có thể tương tác khi nó là foreground, không tương tác được khi nó không phải foreground như đã giải thích ở trên)

- Foreground Lifetime:
+ Sảy ra từ khi gọi onResume => cho tới lúc gọi onPause: trong suốt thời gian này Activity luôn nằm ở trên cùng và chúng ta có thể tương tác được với nó
7. Ví dụ demo
- Bạn tạo một ứng dụng tên là : CheckLifeTimeCycle với cấu trúc như hình dưới đây:

Hình 6: Project
- Double Click vào MainActivity.java:
- Sau đó bấm chuột phải vào màn hình Coding/ chọn Source/ chọn Override / Implement Methods… :

Hình 7

- Màn hình Override / Impement Methods sẽ hiển thị ra như bên dưới, chọn các hàm: onStart,onRestart, onResume, onPause, onStop, onDestroy…: rồi bấm OK


Hình 8

Coding:

Hình 9

Ở trên bạn thấy dòng lệnh trong hàm onResume:
protected void onResume() {
Toast.makeText(this,”onResume”, Toast.LENGTH_SHORT)
.show();
super.onResume();
}

Thực thi (run)
- Bây giờ bạn chạy ứng dụng vào Máy ảo Android và thực hiện một số thao tác: Mở một ứng dụng khác, mở Menu, nhấn nút Back, nhấn nút Home … quan sát hiện tượng bạn sẽ hiểu được cách vận hành các hành này.
- Bạn cần phải hiểu rõ về Life time cycle để giúp ích cho việc quản lý ứng dụng

*******

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Giáo trình: Lập Trình Android [Click để xem]

# Khoá học online:  Lập trình Android toàn tập [Click để xem]


-----------------------------------------
Xem thêm bài và ví dụ khác:

 

* Có thể bản quan tâm: [MMO] Hướng Dẫn *Kiếm Tiền Tự Động* Với Các Ứng Dụng Treo Máy *CỰC KỲ ĐƠN GIẢN VÀ HIỆU QUẢ*