Tải bản đầy đủ
SƠ LƯỢC VỀ HỆ ĐIỀU HÀNH ANDROID

SƠ LƯỢC VỀ HỆ ĐIỀU HÀNH ANDROID

Tải bản đầy đủ

trường là thiết bị G1 do HTC sản xuất và được bán trên T-Mobile. Một vài ngày
sau đó Google công bố sự ra mắt của phiên bản Android SDK release Candidate
1.0.

1.2 Kiến trúc của Android

Hình 1-2 Kiến trúc Android

1.2.1 Tầng ứng dụng (Application):
Android được tích hợp sẵn một số ứng dụng cần thiết cơ bản : Browse,
camera, Phone,….Tất cả các ứng dụng này đều được viết bằng Java

1.2.2. Application Framework
Là một nền tảng phát triển mở, Android cung cấp cho các nhà phát triển
khả năng xây dựng các ứng dụng cực kì phong phú và sáng tạo, có thể tự do tận
dụng thiết bị của phần cứng thông tin địa điểm truy cập, các dịch vụ chạy nền…..
1.2.3. Library:
Android bao gồm một tập hợp các thư viện C/C++ được sử dụng bởi
nhiều thành phần khác nhau trong hệ thống Android. Một số thư viện cơ bản:

7



Hệ thống thư viện C : triển khai BSD-derived có nguồn gốc từ các hệ
thống thư viện chuẩn C (libc), chỉnh để nhúng vào các thiết bị dựa trên

Linux.
• Media Libraries – Dựa trên gói Video OpenCORE; các thư viện hỗ trợ
phát và ghi âm của các định dạng âm thanh và video phổ biến, cũng như
các file hình ảnh tĩnh, bao gồm MPEG4, H.264, MP3, AAC, AMR, JPG,
and PNG
• Surface Manager – Quản lý việc truy xuất vào hệ thống hiển thị
• LibWebCore - một trình duyệt web hiện đại có quyền hạn trong cả trình
duyệt Android và hiển thị nhúng web.
• SGL – Các cơ sở công cụ đồ họa 2D.
• 3D libraries - Thực hiện dựa trên OpenGL ES 1.0 APIs; Thư viện sử dụng
hoặc là tăng tốc phần cứng 3D (nếu có) hoặc bao gồm tối ưu hóa phần
mềm 3D.
• FreeType - bitmap and vector font rendering.
• SQLite - a powerful and lightweight relational database engine available
to all applications.
1.2.4. Android Runtime
Tại cùng một tầng như các thư viện, android runtime cung cấp một bộ lõi
thư viện cho phép các nhà phát triển viết các ứng dụng android bằng cách sử
dụng ngôn ngữ lập trình java. Android runtime cũng bao gồm các máy ảo Dalvik,
cho phép mọi ứng dụng android chạy trong tiến trình riêng của mình. Dalvik là
một máy ảo chuyên dụng được thiết kế đặc biệt cho android và tối ưu hóa cho
các thiết bị điện thoại di động với giới hạn bộ nhớ và CPU
1.2.5. Linux Kernel:
Android dựa trên Linux phiên bản 2.6 cho hệ thống dịch vụ cốt lõi như
security, memory management, process management, network stack, and driver
model. Kernel Linux hoạt động như một lớp trừu tượng hóa giữa phần cứng và
phần còn lại của phần mềm stack.

8

1.2. Công cụ và cài đặt:
Bước 1: Download và giải nén Eclipse Galileo tại :
http://www.eclipse.org/downloads/. Chúng ta nên sử dụng Eclipse gói Galileo để
lát nữa đỡ phải cầu hình lại Eclipse.
Bước 2: Cài đặt ADT
-

Mở Help -> Install new software ->Add
Ở mục Name: ADT plugin hoặc bạn có thể nhập tên khác cũng được
Location: Nhập vào link: http://dl-ssl.google.com/android/eclipse/
OK-> Next cho đến khi cài đặt hoàn thành

Bước 3: Cài đặt Android SDK
- Tải Android SDK tại http://developer.android.com/sdk/index.html và giải

nén
- Mở Eclipse -> Window -> Preferences -> Android -> trong mục SDK
location chọn Browse > đưa đường dẫn đến thư mục SDK vừa giải nén> bấm Apply-> Install
Bước 4: Tạo một máy điện thoại ảo (AVD)
- Vào Window-> Android SDK and AVD manager -> Virtual devices-

> New
- Điền vào các mục Name, Target: chọn API level cho phù hợp ứng dụng
bạn chọn, SDcard chọn Size dùng, nếu không thì để trống cũng được.

9

1.4. Cấu trúc một Project Android:

Hình 1-3: Cấu trúc 1 project Android
1.4.1. AndroidManifest.xml:
Mỗi một project Android khi được tạo ra thì đều tạo ra một file
AndroidManifest.xml , file này được dùng để định nghĩa các screen sử dụng, các
permission cũng như các theme cho ứng dụng. Đồng thời nó cũng chứa thông tin
về phiên bản SDK cũng như main activity sẽ chạy đầu tiên.
File này được tự động sinh ra khi tạo một Android project. Trong file manifest
bao giờ cũng có 3 thành phần chính đó là: application, permission và version.
1.4.2. Thư mục src
Chứa source code ứng dụng. Gồm các package và các class.

10

1.4.3. Thư mục ges
Chứa các file tự động phát sinh( Thường gặp nhất là file R.class )
File R.java là một file tự động sinh ra ngay khi tạo ứng dụng, file này
được sử dụng để quản lý các thuộc tính được khai báo trong file XML của ứng
dụng và các tài nguyên hình ảnh.
Mã nguồn của file R.java được tự động sinh khi có bất kì một sự kiện nào
xảy xa làm thay đổi các thuộc tính trong ứng dụng. Chẳng hạn như, bạn kéo và
thả một file hình ảnh từ bên ngoài vào project thì ngay lập tức thuộc tính đường
dẫn đến file đó cũng sẽ được hình thành trong file R.java hoặc xoá một file hình
ảnh thì đường dẫn tương ứng đến hình ảnh đó cũng tự động bị xoá.
Là file mà ta hoàn toàn không cần phải đụng chạm gì đến trong cả quá
trình xây dựng ứng dụng.
1.4.4. Thưc mục res :
Chứa file main.xml và các hình ảnh có liên quan để thiết kế giao diện cho
màn hình

1.5. Những khái niệm cơ bản trong Lập trình Android:
Một ứng dụng Android bao gồm 4 thành phần chính Active, Inactive,
Visitable, Invisible.
1.5.1. Activity:
Là một trong bốn thành phần chính của một ứng dụng Android, được
dùng để hiển thị màn hình.

11

Lifecycle của Activity:

Hình 1-4. Vòng đời của activity
Một ứng dụng có thể gồm chỉ một activity hay nhiều activity. Thông
thường, một trong số các activity được đánh dấu như là activity đầu tiên phải
được trình diễn tới người dùng khi ứng dụng được khởi động. Chuyển từ một
activity sang activity khác được hoàn thành bằng cách cho activity hiện thời khởi
động activity kế tiếp.
Class cơ sở Activity định nghĩa một loạt các sự kiện mà điều chỉnh vòng
đời của một hoạt động. Class Activity định nghĩa các sự kiện:
 onCreate(): Được gọi khi hoạt động được tạo ra lần đầu tiên
 onStart(): Được gọi khi hoạt động trở nên hữu hình so với người dùng
 onResume(): Được gọi khi hoạt động bắt đầu tương tác với người sử

dụng

12

 onPause(): Được gọi để dừng các hoạt động hiện tại và nối lại các hoạt

động trước đó
 onStop(): Được gọi khi hoạt động không còn hiển thị với người dùng
 onDestroy(): Được gọi trước khi hoạt động bị phá hủy bởi hệ thống (bằng

tay hoặc bằng hệ thống để bảo tồn bộ nhớ
 onRestart(): Được gọi khi hệ thống đã được dừng lại và khởi động lại

một lần nữa
1.5.2.Service:
Một service không có giao diện trực quan, nó chạy trên nền trong một
khoảng thời gian không xác định. Ví dụ một service có thể chơi nhạc nền, hay nó
nạp dữ liệu trên mạng hay tính toán cái gì đó và cung cấp kết quả cho activity
cần đến nó. Mỗi service mở rộng từ lớp cơ sở Service
Một ví dụ cổ điển là media player chơi các bài hát từ một danh sách. Ứng
dụng player có thể có một hay hai activity cho phép người dùng chọn bài hát và
bắt đầu chơi. Tuy nhiên, music playback không tự nó được xử lý bởi một activity
bởi vì người dùng sẽ mong muốn chơi tiếp nhạc khi họ rời khỏi player và làm cái
gì đó khác. Để tiếp tục chơi nhạc, media player activity có thể khởi động một
service chạy trên nền. Hệ thống sẽ giữ cho music playback service chạy thậm chí
khi activity khởi động nó rời khỏi màn hình.
Trong khi kết nối, bạn có thể giao tiếp với dịch vụ thông qua giao diện mà
service đó trưng ra. Ví dụ như trong music service, giao diện này có thể cho phép
người dùng pause, stop và restart lại playback.
Giống như các activity và các thành phần khác khác, service chạy trong
thread chính của tiến trình ứng dụng. Vì thế chúng không thể chặn những thành
phần khác hay giao diện người dùng, chúng thường tạo ra các thread khác cho
các nhiệm vụ hao tốn thời gian.

13

Hình 1-5. Chu trình sống service
1.5.3. Broadcast Receive:
Một Broadcast Rreceiver là một thành phần không làm gì ngoài việc nhận
và đáp lại các thông báo broadcast. Nhiều broadcast khởi đầu trong mã hệ thống ví dụ như thông báo múi giờ thay đổi, pin yếu, ảnh đã được chụp, hay người
dùng đã thay đổi ngôn ngữ … Các ứng dụng có thể tạo ra các broadcast, chẳng
hạn để ứng dụng khác biết được một số dữ liệu đã được tải về thiết bị và sẵn sàng
cho việc sử dụng chúng.
Một ứng dụng có thể có một số Broadcast Receiver để đáp lại bất cứ
thông báo nào mà nó cho là quan trọng. Tất cả các receiver mở rộng từ lớp cơ sở
BroadcastReceiver.
Broadcast Receiver không hiển thị một giao diện người dùng. Tuy nhiên
chúng có thể bắt đầu một activity để đáp lại thông tin mà chúng nhận, hay chúng
có thể sử dụng NotificationManager để cảnh báo người dùng. Notifications có
thể lấy sự chú ý của người dùng bằng nhiều cách, lóe sáng đèn sau, rung, tạo ra
âm thah, vân vân. Chúng thường lấy một biểu tượng bền vững trong thanh trạng
thái, cái mà người dùng có thể mở để lấy thông điệp.
14

1.5.4.Content provider:
Một content provider tạo ra một tập cụ thể các dữ liệu của ứng dụng khả
dụng cho các ứng dụng khác. Dữ liệu có thể được lưu trữ trong hệ thống file,
trong một cơ sở dữ liệu SQLite, hay trong một cách khác nào đó. Content
provider mở rộng lớp cơ sở ContentProvider để cài đặt một tập các chuẩn các
phương thức cho phép các ứng dụng khác đạt được và lưu trữ dữ liệu của kiểu
mà nó điều khiển. Tuy nhiên, các ứng dụng không gọi trực tiếp các phương thức
này, chúng sử dụng một đối tượng ContentResolver và gọi các phương thức của
nó. Một ContentResolver có thể nói chuyện với bất cứ content provider nào,
chúng cộng tác với provider để quản lý giao tiếp liên tiến trình.
1.5.5.Manifest File:
Trước khi Android có thể khởi động một thành phần ứng dụng, nó phải
biết rằng thành phần đó tồn tại. Vì vậy, ứng dụng khai báo những thành phần của
mình trong một manifest file được gắn vào Android package, file .apk này cũng
giữ chứa mã của ứng dụng và các tài nguyên.
Manifest file là một file XML có cấu trúc và thường được đặt tên là
AndroidManifest.xml cho mọi ứng dụng. Nó thực hiện một số bổ sung để khai
báo các thành phần của ứng dụng, như là nêu tên các thư viện ứng dụng cần đến,
và xác định các quyền hạn của ứng dụng muốn được cấp.
Ví dụ như nó khai báo các Activity trong chương trình của chúng ta, khi
khởi động chương trình thì Activity nào sẽ được thực hiện đầu tiên, các quyền
truy cập Internet, SDCard, hay các vấn đề về gửi nhận tin nhắn, cuộc gọi...
1.5.6. Giao diện người dùng trong Android:
Trong một ứng dụng Android, giao diện người dùng được xây dựng bằng
cách sử dụng View và ViewGroup đối tượng. Có nhiều loại quan điểm và các
nhóm view, mỗi một trong số đó là hậu duệ của lớp View. View objects là các
đơn vị cơ bản của biểu hiện giao diện người dùng trên nền tảng Android. Các
class xem như là cơ sở phục vụ cho class con được gọi là "widget", trong đó
cung cấp đầy đủ các đối tượng thực hiện giao diện, giống như các lĩnh vực văn
bản và nút. Class ViewGroup phục vụ như là cơ sở cho lớp con được gọi là "

15

layouts", cung cấp các loại khác nhau của kiến trúc bố trí, như linear, tabular và
relative.
-Một View object là một cấu trúc dữ liệu có đặc tính lưu trữ các thông số
bố trí và nội dung cho một khu vực cụ thể hình chữ nhật của màn hình.
-Một View object xử lý đo lường riêng của mình, bố trí, bản vẽ thay đổi
tập trung,, di chuyển, và phím/tương tác cử chỉ cho khu vực hình chữ nhật của
màn hình.
Là một object trong giao diện người dùng, view cũng là một điểm tương
tác cho người sử dụng và nhận các sự kiện tương tác.
a. View
Tất cả mọi widget đều có chung các thuộc tính cơ bản như là cách trình bày vị
trí, background, kích thước, lề,… Tất cả những thuộc tính chung này được thể
hiện hết ở trong đối tượng View.
Trong Android Platform, các screen luôn được bố trí theo một kiểu cấu trúc phân
cấp như hình dưới. Một screen là một tập hợp các Layout và các widget được bố
trí có thứ tự. Để thể hiện một screen thì trong hàm onCreate của mỗi Activity cần
phải được gọi một hàm là setContentView(R.layout.main); hàm này sẽ load giao
diện từ file XML lên để phân tích thành mã bytecode.

Hình 1-6 Cấu trúc một giao diện ứng dụng Android

16

b. ViewGroup
ViewGroup thực ra chính là View hay nói đúng hơn thì ViewGroup chính là các
widget Layout được dùng để bố trí các đối tượng khác trong một screen. Có một
số loại ViewGroup như sau:


LinearLayout

LinearLayout được dùng để bố trí các thành phần giao diện theo chiều ngang
hoặc chiều dọc nhưng trên một line duy nhất mà không có xuống dòng.
LinearLayout làm cho các thành phần trong nó không bị phụ thuộc vào kích
thước của màn hình. Các thành phần trong LinearLayout được dàn theo những tỷ
lệ cân xứng dựa vào các ràng buộc giữa các thành phần.

Hình 1-7 Bố trí các widget sử dụng LinearLayout


FrameLayout

FrameLayout được dùng để bố trí các đối tượng theo kiểu giống như là các Layer
trong Photoshop. Những đối tượng nào thuộc Layer bên dưới thì sẽ bị che khuất
bởi các đối tượng thuộc Layer nằm trên. FrameLayer thường được sử dụng khi
muốn tạo ra các đối tượng có khung hình bên ngoài chẳng hạn như contact image
button.

17