Sunday, December 23, 2012

[Google Android SDK]-Các thàn phần ứng dụng Application

Các thành phần của một ứng dụng Application

Cách thành phần của một ứng dụng Android là các khối thiết yếu dùng để ghép thành một ứng dụng Android. Mỗi thành phần là một góc nhìn khác nhau tạo thành một ứng dụng Android đầy đủ. Không phải bất kì ứng dụng nào cũng có đầy đủ các thành phần dưới đây, việc có hay không có một thành phần nào tùy thuộc vào mỗi ứng dụng. Một số thành phần sẽ có quan hệ phụ thuộc lẫn nhau. Mỗi thành phần có một vai trò khác nhau giúp định nghĩa một ứng dụng Android đầy đủ. Dưới đây có bốn loại thành phần. Mỗi loại có một mục đích khác nhau và có một vòng đời khác nhau giúp định nghĩa cách mà một thành phần được tạo ra và được hủy khác nhau:
1.1. Activity 
Một Activity đại diện một màn hình đơn với giao diện người dùng. VD: Chương trình Email tích hợp sẳn của hệ điều hành Android có một activity để hiển thị một danh sách các email, một activity thứ hai dùng để hiển thị nội dung chi tiết của một email. Mặc dù cách activity làm việc với nhau để tạo nên một trải nghiệm thống nhất trên ứng dụng, tuy nhiên bản thân chúng hoàn toàn độc lập với nhau. 
VD: Khi soạn thảo email với ứng dụng Email tích hợp sẳn người dùng có thể mở một activity của ứng dụng Camera nếu người dùng cần chia sẽ một tấm hình chụp bằng thiết bị hiện tại.

1.2. Service 
Service là một thành phần dùng để thực thi một công việc dưới dưới nền hệ điều hành (Công việc được thực thi ẩn với người dùng). Thành phần này được dùng cho các công việc cần nhiều thời gian để thực thi hoặc dùng để điều khiển thực thi các công việc từ xa bởi một tiến trình khác. 
VD: Ứng dụng A chạy trên tiến trình pA kết nối đến ứng dụng B hiện đang chạy trên tiến trình pB để yêu cầu B thực hiện một công việc nào đó.

1.3. Content provider 
 Một content provider dùng quản lý việc chia sẻ một tập dữ liệu ứng dụng nào đó. Bạn có thể lưu trữ dữ liệu trền file, trên SQLite database, trên web hoặc trên bất kì nơi lưu trữ nào mà ứng dụng có thể truy xuất. Thông qua việc sử dụng content provider một ứng dụng khác có thể truy vấn, chỉnh sửa tập dữ liệu đó.
VD: Ứng dụng Contact tích hợp sẳn trong Android cung cấp một content provider dùng để quản lý danh sách contact trên ứng dụng. Bằng cách này,bất kì chương trình nào cũng có thể truy xuất danh sách contact này mặc cho “nguyên tắc đặc quyền tối thiểu” đã đề cập ở trên. (Lưu ý: Nếu không cung cấp một content provider thì dữ liệu contact chỉ có thể được sử dụng bởi ứng dụng Contact và không thể được truy xuất bởi ứng dụng nào khác).

1.4. Broadcast receiver 
Broadcast receiver là một thành phần hồi đáp những tín hiệu được phát ra trên toàn hệ thống. Có  rất  nhiều  broadcast  receiver  được  xây  dựng  sẳn  trên  hệ  điều  hành  Android.
VD:  Có  broadcast receiver dùng để bắt tín hiệu tắt màn hình, tín hiệu pin yếu… Người phát triển có thể tự xây dựng một broadcast receiver để bắt các tín hiện cần thiết cho ứng dụng. VD: Bắt tín hiệu để biết một dữ liệu nào đó đã được tải về thiết bị và sẳn sang để sử dụng. Mặc dù một broadcast receiver không hiển thị giao diện cho người dùng quan sát nhưng nó có thể tạo các thông báo trên thanh trạng thái. Trong một số trường hợp broadcast receiver có thể khởi động một service để thực thi một số công việc nào đó. Một khía cạnh độc đáo của hệ điều hành Android là nó được thiết kế để bất kì ứng dụng nào 
cũng có thể khởi động một activity của ứng dụng khác. VD: Nếu bạn muốn người dùng ứng dụng có có thể chụp hình từ camera của thiết bị. Hiển nhiên công việc này đã được một ứng dụng khác làm rồi, bạn không cần tạo mới một activity để làm công việc này mà đơn giản chỉ cần khởi động một activity 
chụp ảnh của ứng dụng Camera để chụp hình. Khi chụp hình hoàn tất, bức ảnh sẽ được trả về cho ứng dụng của bạn. Bằng cách này ta có thể tiết kiệm rất nhiều thời gian bằng cách sử dụng lại cách thành phần có sẳn của hệ điều hành. Khi hệ thống khởi động một thành phần, nó cũng khởi động tiến trình cho ứng dụng đó(Nếu nó chưa được khởi động). 
VD: Nếu ứng dụng của bạn sử dụng một activity của ứng dụng Camera để chụp hình, hệ thống sẽ khởi động tiến trình của ứng dụng Camera. Chính vì điểm này mà một ứng dụng Android sẽ hoàn toàn khác so với các ứng dụng trên các nền tảng khác. Một ứng dụng Android không có một điểm bắt đầu duy nhất (Không có hàm main). Do hệ thống thực thi mỗi ứng dụng trên một tiến trình riêng biệt cùng với quyền truy xuất hạn chế nên bất kì một ứng dụng nào cũng không được quyền khởi động một thành phần của ứng dụng khác. Để khởi động một thành phần của ứng dụng khác, bạn phải chuyển một đối tượng kiểu Intent đến hệ điều hành, đối tượng kiểu Intent này sẽ chứa các thông tin về thành phần mà bạn muốn khởi động. Nhờ những thông tin này mà hệ điều hành sẽ khởi động thành phần phù hợp.
Khởi động thành phần:
Ba trong số bốn loại thành phần chính của một ứng dụng Android (Activity, Service, Broadcast receiver) có thể được khởi động bởi một đối tượng Intent. Trong đó đối tượng Intent có ý nghĩ gần giống như một đường dẫn đến một địa chỉ web (URLs) mà hằng ngày mọi người vẫn sử dụng.  Định dạng URLs được Tim Berners phát minh để sử dụng trong giao thức Hypertext Transfer Protocol (HTTP). Định dạng này là một hệ thống các động từ đi kèm các địa chỉ. Địa chỉ sẽ xác định nguồn tài nguyên như Web page, hình ảnh... Động từ sẽ xác định cần phải làm cái gì với nguồn tài nguyên đó: GET để lấy dữ liệu về, POST để đưa dữ liệu lên để thực thi một công việc nào đó. Khái niệm Intent cũng tương tự, Intent là một mô tả trừu tượng của một hành động được thực thi. Trong đó đối tượng Intent sẽ xác định thành phần nào (Activity, Service, Broadcast receiver) sẽ được khởi động, dữ liệu cũng như hành động cần thực thi với dữ liệu đi kèm. 
VD: Để hiển thị thông tin của một contact. Ta cần tạo một đối tượng kiểu Intent xác định hành động  là  “xem  thông  tin  contact”  thành  phần  Android  sẽ  được  khởi  động  để  thực  thi  hành  động  là activity “Contact details” của ứng dụng Contact (Ứng dụng tích hợp sẳn trong hệ điều hành Android) 
và dữ liệu đi kèm sẽ là id của contact cần xem thông tin. 

Có thể sử dụng Intent để: 
- Khởi động một Activity. 
- Khởi động một Service. 
- Kết nối đến một Remote service. 
- Khởi động một Broadcast receiver. 
- Thực thi một câu truy vấn dữ liệu trên Content Provider 

2.  AndroidManifest.xml 
Trước  khi  hệ  điều  hành  Android  có  thể  khởi  động  một  thành  phần  (Activity,  Services, Broadcast  receiver)  thì  hệ  thống  phải  biết  thành  phần  này  có  tồn  tại  hay  không  bằng  cách  đọc  file  AndroidManifest.xml của ứng dụng. Mỗi ứng dụng phải khai báo mọi thành phần (Activity, Service, 
Broadcast receiver) trong file này và phải đặt ở thư mục gốc của ứng dụng. 
Mỗi file manifest có những khai báo: 
-  Định danh xác định các quyền của người sử dụng như truy xuất internet, truy xuất danh 
sách contact… 
-  Xác định phiên bản API tối thiểu mà ứng dụng có thể thực thi. Phiên bản API này tương 
ứng với các phiên bản của hệ điều hành Android. 
-  Các tính năng phần cứng cần thiết cho ứng dụng như GPS, camera, Bluetooth… 
-  Các bộ API liên kết sử dụng trong ứng dụng (VD: Google map…). 
Một file AndroidManifest.xml (do Eclipse tự tạo, khi lập trình tùy theo tình huống ta thêm vào các tính năng)  có cấu trúc như sau: 
Trong đó manifest là thẻ chính. Thẻ gốc này sẽ có ít nhất một thể con là application với các thuộc tính xác định icon của ứng dụng, tên ứng dụng… . Trong thẻ application sẽ đặt các khai báo các thành phần tồn tại trong ứng dụng bằng cách sử dụng các thẻ: 
o  <activity>: Khai báo một Activity. 
o  <service>: Khai báo một service. 
o  <receiver>: Khai báo một Broadcast reciever. 
o  <provider>: Khai báo một Content Provider. 
Ngoài việc khai bao các thành phần tồn tại trong ứng dụng còn có các khai báo: 
o  <supports-screens>: Khai báo loại màn hình mà ứng dụng hổ trợ. 
o  <uses-configuration>: Khai báo phần cứng nhập liệu cần thiết cho ứng dụng (VD: Bàn 
phím, trackball, phiếm bấm năm chiều…). 
o  <uses-feature>: Các tính năng phần cứng cần thiết cho ứng dụng. 
o  <uses-sdk>: Phiên bản API tối thiểu. 

No comments:

Post a Comment