Thứ Tư, 17 tháng 12, 2014

Lập trình Android, TUT ANDROID 002

TUT ANDROID 002: CÁC THÀNH PHẦN CHÍNH TRONG ANDROID APP, ACTIVITY TRONG ANDROID

( VEDA ) Trong bài trước mình đã giới thiệu với các bạn về cách cài đặt và chạy một ví dụ đơn giản nhất về app trong android. Trong bài này mình sẽ giới thiệu về các thành phần chính trong app.

Trong Android app có thể chia thành 4 thành phần chính

- Activity: Là một thành phần của ứng dụng cung cấp một giao diện mà người dùng có thể tương tác vào đó để thực hiện một hành động nào đó ví dụ như: gọi điện, gửi email, gửi sms …

- Service: là một thành phần chạy ngầm trong android. Service dùng để update dữ liệu, đưa ra các cảnh báo (Notifacation) và không bao giờ hiển thị cho người dùng nhìn thấy.

- Broadcast Receiver(BR): Là thành phần để thu nhận các Intent thông báo từ hệ điều hành (pin yếu, có sms, có cuộc gọi đến..) hoặc từ chính trong app của chúng ta. BR cũng không có giao diện người dùng.

- Content Provider: Lưu và truy suất dữ liệu trong tất cả app, cho phép ứng dụng truy suất, chỉnh sửa và chia sẻ dữ liệu với nhau.

Ngoài 4 thành phần chính này trong một số tài liệu khác có thể nhắc tới các thành phần khác như : Intent, Notification, app widget mình sẽ dần dần đề cập đến tất cả các vấn đề này

Trong bài này mình tập trung giới thiệu về Activity vòng đời của Activity để các bạn có thể hiểu tương đối rõ ràng về nó


Trong vòng đời của mình Activity tồn tại ở một trong 3 trạng thái:

Running: Activity đang hiển thị trên giao diện chính, người dùng có thể tương tác với giao diện

Pause: Activity vẫn hiển thị nhưng người dùng không thể tương tác với giao diện (Khi Activity đang running thì xuất hiện 1 popup (trong android gọi Dialog) thì Activity sẽ chuyển sang trạng thái pause.

Stop: Khi Activity đang chạy và bị thay thế hoàn toàn bởi Activity mới thì Activity cũ sẽ chuyển sang trạng thái Stop

Để hiểu rõ từng trạng thái này các bạn có thể import project dưới đây về và chạy thử. Đây là project example của google mục đích để mọi người hiểu rõ về Activity và các trạng thái của nó. Các bạn chạy thử và xem kết quả ban đầu không cần hiểu về code của nó.


Note: Cách import project và cách chạy một project các bạn có thể xem lại mục 4 trong file pdf mình đính kèm trong TUT 001 ở cuối bài

Khi Các bạn chạy ứng dụng các bạn sẽ thấy màn hình có giao diện như sau:


Điều này có nghĩa khi ứng dụng bắt đầu chạy thì chạy vào Activity A, nó thực hiện lần lượt các Phương thức A.onCreate() -> A.onStart() -> A.onResume() của Activity A.

Activity A đang ở trạng thái running người dùng có thể tương tác với giao diện

Khi bạn click vào button “start B” Ứng dụng sẽ có hình như sau:


Khi đó các bạn đã start Activity B các bạn sẽ thấy các phương thức mà ứng dụng đã đi qua

A.onCreate() -> A.onStart() -> A.onResume() -> A.onPause() -> B.onCreate() -> B.onStart() -> B.onResume() -> A.onStop()

Muốn start Activity B từ Activity A đầu tiên ứng dụng phải pause Activity A sau đó khởi tạo Activity B (thực hiện onCreate(), onStart(), onResume() của Activity B) rồi mới thực hiện A.onStop()

Activity B đang ở trạng thái running người dùng có thể tương tác với giao diện; Activity A trở về trạng thái stop

Khi các bạn klick vào button Dialog thì Activity B sẽ chuyển sang trạng thái Paused


Activity B đang Pause người dùng có thể nhìn thấy giao diện nhưng không thể tương tác vào giao diện; Activity A vẫn đang là Stop

Sau khi các ban close dialog rồi các bạn chọn Button “Start C”


ð Activity C đang ở trạng thái running người dùng có thể tương tác với giao diện; Activity A và Activity B đang ở trạng thái Stop

Mỗi khi 1 Activity mới được Start thì Activity trước đó sẽ được chuyển sang trạng thái Stop và hệ điều hành sẽ đưa thêm Activity mới vào trong 1 “Stack”

Note: Các bạn có thể hiểu Stack như là 1 chồng đĩa mỗi lần các bạn đặt thêm 1 chiếc đĩa thì các bạn chỉ có thể đặt nó ở trên cùng của chồng đĩa và khi các bạn lấy ra thì các bạn chỉ có thể lấy các chiếc đĩa theo thứ tự từ trên xuống (Firt In Last Out – FILO: vào trước ra sau)như vậy chiếc đĩa đặt vào đầu tiên sẽ được lấy ra cuối cùng và chiếc đĩa đặt vào cuối cùng thì được lấy ra sau. Các bạn có thể tìm hiểu thêm về cơ chế Queue (hàng đợi Firt In Firt Out – FIFO: vào trước ra trước) đây là hai kiến thức khá hay và cơ bản trong kỹ thuật lập trình

Việc xếp chồng (Stack) các Activity sẽ được thể hiện rõ khi các bạn thực hiện lần lượt việc finish Activity C (click button Finish C)


Sau khi finish Activity C: Activity C bị Destroyed và Activity B được restart lại chuyển sang trạng thái running

Sau đó các bạn click “Finish B”


Sau khi finish Activity B: Activity B chuyển sang trạng thái Destroyed và Activity A được restart lại

Note: các bạn có thể thấy rõ ràng cơ chế stack ở đây. Ban đầu chúng ta start lần lượt các Activity theo thứ tự A->B->C nhưng khi chúng ta destroy chúng thì chúng ta phải hủy theo thứ tự ngược lại khi ta destroy C -> B ở trên đỉnh Stack -> B được hiển thị; tương tự khi ta destroy B thì A lại ở trên đỉnh Stack và khi đó A được hiển thị

Trên đây mình giới thiệu qua về cơ chế hoạt động của Activity, vòng đời và các trạng thái của nó điều kiện để xuất hiện các trạng thái đó và cơ chế lưu Activity của hệ điều hành.

Bài viết của mình có thể còn nhiều thiếu sót rất mong nhận được sự bổ sung chia sẻ của các bạn.
 
Tiếp theo: Bài 3 TUT ANDROID 003: USER INTERFACE TRONG ANDROID – BUTTON (PART 1)

Không có nhận xét nào:

Đăng nhận xét