Một ứng dụng thường chứa nhiều activity có liên hệ với nhau. Trong đó, có một activity của ứng dụng được xác định là activity chính (main activity), activity này
được hiển thị và tương tác với người dùng đầu tiên khi chạy ứng dụng. Sau đó, mỗi activity có thể khởi động một activity khác để thực hiện những tác vụ khác. Mỗi khi một activity mới khởi động, activity trước đó sẽ dừng lại, nhưng hệ thống vẫn bảo lưu
activity này trong một ngăn xếp - đó là “ngăn xếp lùi” (back-stack).
Khi một activity mới khởi động, nó được đẩy vào ngăn xếp lùi và khiến người dùng focus vào activity đó. Ngăn xếp lùi tuân thủcơ chế “last in, first out” (còn gọi là
“LIFO”, tức ”vào sau, ra trước”). Do vậy, khi người dùng làm việc xong với activity hiện tại và nhấn nút Back, activity này sẽ được lấy khỏi ngăn xếp (và bị hủy), còn
activity trước đó sẽđược phục hồi.
Khi một activity bị dừng do một activity mới khởi động, nó được thông báo về sự
thay đổi trạng thái này thông qua các phương thức callback trong vòng đời của activity. Có vài phương thức callback mà một activity có thể nhận, đó là kết quả từ sự thay đổi trạng thái của activity này - hệ thống tạo, dừng, phục hồi hay hủy nó - và mỗi
ThS. Bùi Trung Úy 31
callback đem đến cho lập trình viên cơ hội thực hiện công việc cụ thể thích hợp với sự thay đổi trạng thái đó.
Một Activity cơ bản có 4 trạng thái chính:
o Running (hoạt động): Khi Activity được kích hoạt và được hệ thống để vào ngăn
xếp back-stack, nó sẽ bước vào trạng thái Running. Với trạng thái này, người dùng nhìn thấy và tương tác được với Activity của ứng dụng.
o Paused (tạm dừng): Trạng thái tạm dừng, Activity bị tạm dừng khi có một thành phần khác (activity khác hoặc cảnh báo hệ thống) nhận được tiền cảnh (foreground)
và được focus tương tác, lúc này Activity vẫn đang chạy, người dùng vẫn nhìn thấy,
nhưng Activity lại bị che một phần bởi thành phần đó. Chẳng hạn như khi bị một
dialog đè lên, việc che Activity này có thể không phải hoàn toàn. Chính vì vậy mà
Activity đó tuy được người dùng nhìn thấy nhưng không thểtương tác được.
Khi một activity bị tạm dừng, nó vẫn đang tồn tại - đối tượng Activity vẫn nằm trong bộ nhớ, duy trì tất cả trạng thái cũng như thông tin thành viên, và được gắn với trình quản lý cửa sổ. Tuy nhiên, activity bị tạm dừng không còn hiển thị đối với người dùng và có thể bị hệ thống hủy khi cần bộ nhớ cho việc khác.
o Stopped (bị dừng): Trạng thái này khá giống với trạng thái tạm dừng ở trên.
Nhưng khi này Activity bị che khuất hoàn toàn bởi một thành phần giao diện nào đó,
hoặc bởi một ứng dụng khác. Và tất nhiên lúc này người dùng không thể nhìn thấy
Activity được nữa.
Ví dụ, hành động khi người dùng nhấn nút Home đểđưa ứng dụng về background,
cũng khiến Activity đang hiển thị trong ứng dụng rơi vào trạng thái dừng này.
o Destroyed (kết thúc): Activity kết thúc khi hoàn tất tác vụ của nó, hoặc hệ thống có thể loại bỏ activity này khỏi bộ nhớ bằng cách yêu cầu activity kết thúc (gọi
phương thức finish() của activity), hoặc đơn giản là hủy tiến trình của nó.
Trường hợp này xảy ra khi người dùng nhấn nút Back để thoát một Activity. Hoặc lời gọi hàm finish() từ một Activity để “kết thúc nó”. Cũng có khi ứng dụng ở trạng thái background quá lâu, hệ thống có thể sẽ thu hồi tài nguyên bằng cách dừng hẳn các Activity trong ứng dụng, làm cho tất cả các Activity đều vào trạng thái này. Khi vào trạng thái Finish, Activity sẽ kết thúc vòng đời của nó.