[Android căn bản] Bài 5: Vòng đời Activity trong Android

[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ác Activity 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

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

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ái active.
  • Nếu activity không thể tương tác nhưng vẫn nhìn thấy ( khi mà bị che bởi 1 activity 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ày activity có thể bị xóa bỏ bởi hệ thống khi thiết bị thiếu bộ nhớ. Ví dụ khi có 1 activity khác dạng dialog hiện lên chỉ che đi 1 phần của activity hiện tại thì activity vào trạng thái paused.
  • Nếu activity hoàn toàn bị che khuất bởi activity 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ái stopped.
  • 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()onDestroy(). 1 activity sẽ cài đặt các trạng thái trong onCreate() và giải phóng toàn bộ tài nguyên trong onDestroy(). 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ại onCreate() và kết thúc luồng tại onDestroy().
  • Visible lifetime: xảy ra giữa onStart()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ên activity 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ể đặt Broadcast Receiver tại onStart() và loại bỏ tại onStop().
  • Foreground lifetime: xảy ra giữa onResume()onPause(). Trong giai đoạn này activity ở 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ì.

Các bài liên quan

Tuấn ĐC

Tuấn ĐC

Tôi thích tự do, làm những gì mình thích, thích đi nhiều nơi và học được nhiều thứ.

Liên hết bài viết: ""