Thứ Tư, 8 tháng 6, 2016

Tìm hiểu vòng đời của 1 ứng dụng Android – Activity Lifecycle

Là 1 lập trình viên Android, các bạn không thể không biết về vòng đời của ứng dụng Android. Hôm nay mình sẽ giới thiệu cho các bạn hiểu hơn về vòng đời của 1 ứng dụng Android từ lúc khởi động đến khi kết thúc ứng dụng.
Android có cơ chế quản lý các process theo chế độ ưu tiên (priority). Các process có độ ưu tiên thấp sẽ bị Android giải phóng mà không hề cảnh báo nhằm đảm bảo tài nguyên.
Một sự khác thường và đặc tính cơ bản của Android là thời gian sống của tiến trình ứng dụng không được điều khiển trực tiếp bởi chính nó. Thay vào đó, nó được xác định bởi hệ thống qua một kết hợp của:
– Những phần của ứng dụng mà hệ thống biết đang chạy.
– Những phần đó quan trọng như thế nào đối với người dùng.
– Bao nhiêu vùng nhớ chiếm lĩnh trong hệ thống.

1. Các loại tiến trình (process) của Android

Để hiểu được vòng đời của 1 ứng dụng Android, trước tiên các bạn phải biết được các loại tiến trình. Có 5 loại tiến trình như sau.
  • Foreground process: là process của ứng dụng hiện thời đang được người dùng tương tác.
  • Visible process: là process của ứng dụng mà activity đang hiển thị đối với người dùng (onPaused() của activity được gọi).
  • Service process: là Service đang running.
  • Background process: là process của ứng dụng mà các activity của nó ko hiển thị với người dùng (onStoped() của activity được gọi).
  • Empty process: process không có bất cứ 1 thành phần nào active.
Theo chế độ ưu tiên thì khi cần tài nguyên, Android sẽ tự động kill process, trước tiên là các empty process.

2. Vòng đời của ứng dụng Android.

Đầu tiên bạn phải hiểu trong mỗi ứng dụng sẽ có một hoặc nhiều Activity (bạn hiểu đại khái là các màn hình tương tác). 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. 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 manifest
Tiếp theo mình sẽ nói về Activity Stack: bên trong hệ thống các activity được quản lý như một activity stack. Khi một Activity mới được start, nó được đặt ở đỉnh của stack và trở thành activity đang chạy (running activity), các activity trước sẽ tạm dừng và ở bên dưới activity mới và sẽ không thấy trong suốt quá trình activity mới tồn tại. Nếu người dùng nhấn nút Back thì activity kết tiếp của stack sẽ di duyển lên và trở thành active (đó chính là cơ chế LIFO – LAST IN FIRST OUT)
26
Với mỗi Activity thường vòng đời có 4 trạng thái sau:
Running (đang kích hoạt): Activity đang hiển thị trên màn hình (foreground). Activity này tập chung vào những thao tác của người dùng trên ứng dụng
Paused (tạm dừng): Activity được tạm dừng, tuy vẫn hiển thị (visible) nhưng không thể tương tác (lost focus). Có nghĩa là một activity mới ở trên nó, nhưng không bao phủ đầy màn hình. Một activity tạm dừng là còn sống, nhưng có thể bị kết thúc bởi hệ thống trong trường hợp thiếu vùng nhớ.
Stopped (dừng – không phải Destroyed): Activity bị thay thế hoàn toàn bởi Activity mới sẽ tiến đến trạng thái stop. Nó vẫn còn trạng thái và thông tin thành viên trong nó. Người dùng không thấy nó và thường bị loại bỏ khi hệ thống cần vùng nhớ cho các tác vụ khác.
Killed: Khi hệ thống bị thiếu bộ nhớ, nó sẽ giải phóng các tiến trình theo nguyên tắc ưu tiên. Các Activity ở trạng thái stop hoặc paused cũng có thể bị giải phóng và khi nó được hiển thị lại thì các Activity này phải khởi động lại hoàn toàn và phục hồi lại trạng thái trước đó.
27
Vòng đời của Activity được thể hiện theo biểu đồ dưới đây.
Trong vòng đời của ứng dụng Android bạn cần phần biệt các loại sau:
Entire lifetime: Từ phương thức onCreate( ) cho tới onDestroy( ). Chính là toàn bộ vòng đời của ứng dụng
Visible liftetime: Từ phương thức onStart( ) cho tới onStop( ). Trong trường hợp này 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: Từ phương thức onResume( ) cho tới onPause( ). Trong suốt thời gian này Activity luôn nằm ở trên cùng và Ta có thể tương tác được với nó.
Các hàm thực thi:
– onCreate(…): hàm này được gọi khi lớp Activity được khởi tạo, dùng để thiết lập giao diện ứng dụng và thực thi những thao tác cơ bản.
– onStart(): hàm này được gọi khi lớp ứng dụng xuất hiện trên màn hình.
– onResume(): hàm được gọi ngay sau OnStart hoặc khi người dùng focus ứng dụng, hàm này sẽ đưa ứng dụng lên top màn hình.
– onPause(): hàm được gọi khi hệ thống đang focus đến 1 activity trước đó.
– onStop(): hàm được gọi khi một activity khác được khởi động và focus.
– onRestart(): được gọi khi ứng dụng chuyển sang onStop(), nhưng muốn khởi động lại bằng onStart().
Vậy là các bạn đã hiểu được vòng đời của 1 ứng dụng Android. Các bạn sẽ dần hiểu sâu hơn về nó trong quá trinh các bạn code. Chúc các bạn học tốt.
Gợi ý xem thêm: