Trong bài tập 5 bạn cần hiểu các khái niệm sau:
1) Applications là gì?
2) Activities là gì?
3) Activity Stack là gì?
4) Tasks là gì?
5) Life Cycle States là gì?
—————————————————————————————————–
1) Applications là gì?
– Bạn hiểu nôm na như sau: 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 Application (Ứng dụng cụ thể nào đó – Ví dụ như ứng dụng chống tin nhắn rác, ứng dụng tìm đường đi ngắn nhất, ứng dụng đăng ký học phần bằng sms …. )
2) Activities là gì?
– Thông thường trong một ứng dụng (Application) 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 giống như Form trong .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, bạn sẽ hiểu rõ hơn về vòng đời trong phần Life Cycle States. 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 Manifest
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 FIRST 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.
– Ở đây bạn chú ý là có 2 kiểu mở Activity mới :
a) 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ũ
b) 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ì?
– Bạn hiểu đại khái 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ả.
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)
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 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 “XỬ” 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 “Xử” trong bất kỳ tình huống nào.
*** 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.
– Trong vòng đời của ứng dụng Android bạn cần phần biệt 2 loại sau:
– 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 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à Ta có thể tương tác được với nó
Như vậy bạn đã hiểu được vòng đời của một ứng dụng Android diễn ra như thế nào.
Bây giờ Tôi sẽ Demo ứng dụng Android để kiểm tra vòng đời của nó:
– 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:
– 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… :
– Màn hình Override / Impement Methods sẽ hiển thị ra như bên dưới, bạn chọn các hàm: onStart, onRestart, onResume, onPause, onStop, onDestroy…: rồi bấm OK
Bạn xem coding bên trong:
Ở 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();
}
Đơn giản là Tôi chỉ hiển thị lên xem hàm nào sẽ được triệu gọi ứng với Life time cycle của Activity
– 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.
– Trong bài tập tiếp theo Tôi sẽ làm thêm một ví dụ về Life time cycle để bạn hiểu rõ hơn về nó, đặc biệt là tận mắt chứng kiến đâu là Visible Life time, đâu là Foreground Life time
– 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
Chúc các bạn thành công.
Reblogged this on tat ca trong 1 Blog.
cám ơn thầy bài viết rất hữu ích
Cảm ơn thầy, bài dạy rất chi tiết và dễ hiểu ^^!
thầy cho em hỏi, tập tin .apk nó được lưu ở đâu vậy ạ.
Trừu tượng quá thầy ơi
Cho em hỏi là pause với stop với destroy khác nhau thế nào ạ. Pause là tạm dừng chương trình. Stop là thoát hẳn khỏi chương trình. Destroy là hủy cài đặt application phải không ạ.
Bài viết rất bổ ích. Em cảm ơn thầy!
hay lắm ạ, em cảm ơn thầy
thưa thầy em có một thắc mắc là khi hệ thống kill 1 activity cũ hơn nhưng activity đó lại nằm trong cùng 1 tiến trình với running activity (khi các activity thuộc cùng một ứng dụng) thì lúc đó hệ thống sẽ kill activity cũ đó mà không ảnh hưởng tới running activity hay sẽ kill cả tiến trình chứa các activity đó ạ? (vì em nghĩ hệ thống chỉ kill tiến trình chứ không kill activity)