![[Android căn bản] Bài 5: Vòng đời Activity trong Android](https://tuandc.com/wp-content/uploads/2017/08/Android.jpg)
[Android căn bản] Bài 5: Vòng đời Activity trong Android

Ây dà xin chào các bạn sau một thời gian mình lặn mất tiêu vì đi chiến project cho công ty giờ mình đã quay trở lại và ăn hại hơn xưa với series lập trình Android truyền kì.
Ngày xưa ông cha ta đã có câu sinh lão bệnh tử, tre già măng mọc để chỉ về số kiếp cuộc đời con người, khi con người ta được sinh ra, lớn lên và chết đi khi về già. Cát bụi trở về với cát bụi chúng ta sẽ chết khi đã đi đến kết thúc vòng đời của mình. Và trong
Android
cũng vậy cácActivity
cũng có vòng đời của riêng nó cũng sinh ra, hoạt động và chết đi.
Vòng đời của Activity
Tôi xin đưa ra một cái hình mô phỏng vòng đời của Activity
cho các bạn dễ liên tưởng. À mà bạn nào biết cấu trúc dữ liệu thì càng tốt vì vòng đời của Activity
có liên quan đến cấu trúc dữ liệu Stack
(ngăn xếp).

Vòng đời Activity trong Android
Như bạn thấy trên hình đây chính là vòng đời của một Activity
trong Android
có sinh và tử.
Activity
trong Android
được quản lí như một ngăn xếp
.

Cấu trúc dữ liệu Stack
Đây là cấu trúc dữ liệu Stack
và trong Android các Activity
cũng được quản lí như vậy và nó được gọi là Activity Stack.
Khi bạn khởi tạo và gọi một Activity
thì nó sẽ được hệ thống đặt lên đầu ngăn xếp(push) và trạng thái của nó sẽ là running
tức là nó đang được chạy và hiển thị ra màn hình bạn của thể tương tác được với nó và nếu có một Activity
mới được kích hoạt thì Activity
mới này sẽ được cho vào ngăn xếp và cái Activity
trước đó sẽ sẽ được xếp vào bên dưới Activity
mới trong ngăn xếp và trạng thái của Activity
này sẽ là Visible
tức là nó sẽ không được hiển thị trên màn hình và không tương tác được, nó sẽ được hiển thị lại khi Activity
nằm trên nó được đưa ra khỏi Stack
(pop).
Như bạn thấy trên hình vòng đời nó có thể chia làm ba giai đoạn như vòng đời con người vậy:
Activity Launched(Sinh): Đây là lúc Activity
được khởi tạo và bạn có trong ba hàm được triệu gọi là onCreate()
, onStart()
, onResume()
có hàm nào rất quen thuộc không? vâng đó là hàm onCreate()
mà bạn hay viết khi tạo một Activity
mới đây chính là hàm sẽ khởi tạo Activity
như chỉ ra file XML
của giao diện hay tải các nguồn tài nguyên cần thiết, hàm onStart
sẽ được triệu gọi khi Activity
được cho vào ngăn xếp và và trạng thái sẽ là activie và được hiển thị trên màn hình, còn hàm onResume()
chỉ được triệu gọi khi một Activity
nằm dưới Activity
khác trong Stack
được triệu gọi lúc này nó sẽ chuyển trạng thái từ Visible
sang trạng thái active
.
Một Activity
sẽ có 4 trạng thái chính:
- Nếu
activity
ở phía trên của màn hình (hay ở trên cùng của ngăn xếp), thì nó đang ở trạng thái active (hoạt động) / running (đang chạy). Ví dụ khi ta cần gọi điện thìactivity
bấm số đó đang ở trạng tháiactive
. - Nếu
activity
không thể tương tác nhưng vẫn nhìn thấy ( khi mà bị che bởi 1activity
khác nhưng người dùng vẫn có thể nhìn thấy nó ở phía sau ) thìactivity
này đang ở trạng thái paused (tạm dừng). Khi ở trạng thái nàyactivity
có thể bị xóa bỏ bởi hệ thống khi thiết bị thiếu bộ nhớ. Ví dụ khi có 1activity
khác dạngdialog
hiện lên chỉ che đi 1 phần củaactivity
hiện tại thìactivity
vào trạng tháipaused
. - Nếu
activity
hoàn toàn bị che khuất bởiactivity
khác thì nó đang ở trạng thái stopped (đã dừng).Activity
này vẫn giữ được tất cả trạng thái và thông tin, nhưng không còn hiển thị với người dùng và thường xuyên bị xóa bỏ bởi hệ thống khi thiếu bộ nhớ. Ví dụ khi ta tắt màn hình thì khi đóactivity
vào trạng tháistopped
. - Nếu
activity
ở trạng thái paused (tạm dừng) hay stopped (đã dừng), hệ thống có thể xóa bỏ activity đó khỏi bộ nhớ bằng cách yêu cầu nó tự kết thúc hoặc xóa bỏ tiến trình của nó. Khi acitivty đó hiển thị lại với người dùng thì sẽ được khởi tạo lại và khôi phục lại trạng thái trước đó.
Activity Running(Hoạt động): đây là lúc Activity
đang được chạy và hiển thị, người dùng có thể tương tác được với nó và ở đây cũng có hai phương thức có thể được triệu gọi là onPause()
, onStop()
.
onPause
sẽ được triệu gọi khi có một Activity
mới được triệu gọi và Activity đang chạy sẽ được đặt trạng thái là visible
và nếu Activity visible
quá lâu thì thì phương thức onStop() sẽ được triệu gọi để giải phóng tài nguyên được sử dụng tại Activity
.
Activity Shutdown(Tử): Đây chính là sự kết thúc của Activity
vào lúc này phương thức onDestroy
sẽ được triệu gọi, phuong thức này sẽ giải phóng toàn bộ các tài nguyên mà Activity
sử dụng, kết thúc các tiến trỉnh mà Activity
đang thực thi và đưa Activity
đó ra khỏi ngăn xếp lúc này Activity
không còn tồn tại nữa.
Trong vòng đời của Android thì có 3 vòng lặp chính mà bạn cần biết:
- Entire lifetime: xảy ra giữa
onCreate()
vàonDestroy()
. 1activity
sẽ cài đặt các trạng thái trongonCreate()
và giải phóng toàn bộ tài nguyên trongonDestroy()
. Ví dụ có 1 luồng chạy ngầm tải dữ liệu từ trên mạng, ta có thể tạo luồng tạionCreate()
và kết thúc luồng tạionDestroy()
. - Visible lifetime: xảy ra giữa
onStart()
vàonStop()
. Trong giai đoạn này, người dùng có thể nhìn thấy activity trên màn hình, tuy nhiên nó không ở trên đầu ngăn xếp và không thể tương tác với người dùng. Giữa 2 phương thức này người dùng có thể lưu trữ được tài nguyên cần thiết hiển thị lênactivity
cho người dùng. Ví dụ ta cần quan sát thay đổi ảnh hưởng tới giao diện, thì ta có thể đặtBroadcast Receiver
tạionStart()
và loại bỏ tạionStop()
. - Foreground lifetime: xảy ra giữa
onResume()
vàonPause()
. Trong giai đoạn nàyactivity
ở trên đầu ngăn xếp và có thể tương tác với người dùng.
Như vậy tôi đã giới thiệu với các bạn về vòng đời của Activity
trong Android, cảm ơn các bạn đã theo dõi và hẹn gặp lại các bạn trong những bài tiếp theo của series lập trình Android truyền kì.
