Tải bản đầy đủ (.doc) (74 trang)

Tìm hiểu hệ điều hành android và xây dựng ứng dụng game sudoku

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.16 MB, 74 trang )

LỜI CẢM ƠN
Sau một thời gian tìm hiểu về hệ điều về Hệ điều hành Android, em đã hoàn
thành đề tài: “Tìm hiểu hệ điều hành Android và xây dựng ứng dụng game
Sudoku”. Đề tài được hoàn thành nhờ sự cố gắng của bản thân, nhờ có sự hướng
dẫn, chỉ bảo của thầy Trần Văn Khánh, cùng với sự giúp đỡ của bạn bè, của những
người đã có kinh nghiệm làm việc với Android. Vì thời gian có hạn, cùng với kiến
thức hạn chế của mình, cho dù em đã cố gắng nhưng chắc chắn không tránh khỏi sai
sót. Em rất mong nhận được sự góp ý của các thầy cô trong bộ môn cùng toàn thể
các bạn.
Em xin chân thành cảm ơn!
Thái Nguyên, tháng 6 năm 2012
Sinh viên thực hiện
Trần Văn Toàn

1


LỜI CAM ĐOAN
Đồ án tốt nghiệp là sản phẩm tổng hợp kiến thức mà sinh viên đã học được
trong suốt quá trình học tập tại trường đại học. Ý thức được điều đó, với tinh thần
nghiêm túc, sự học tập miệt mài của bản thân và nhờ sự giúp đỡ của bạn bè, thầy cô
em đã hoàn thành xong đồ án tốt nghiệp của mình.
Em xin cam đoan những kết quả trong đồ án “Tìm Hiểu HĐH Android và
xây dựng ứng dụng game Sudoku” là sự nghiên cứu của em, không sao chép của
ai. Nội dung đồ án có tham khảo, sử dụng tài liệu, thông tin từ một số nguồn được
trích dẫn trong phần tài liệu tham khảo. Nếu có gì sai lệch em xin hoàn toàn chịu
trách nhiệm.
Tác giả đồ án
Trần Văn Toàn

2




DANH MỤC CÁC BẢNG BIỂU
Bảng 1.1 Các phiên bản Android đã phát hành............................................................9
Bảng 3.1 Chi tiết bảng Folder.....................................................................................64
Bảng 3.2 Chi tiết bảng Sudoku...................................................................................65

DANH MỤC CÁC HÌNH ẢNH
Hình 2.1 Khuôn dạng game sudoku chuẩn.................................................................41
Hình 2.2 Biểu đồ Use-Case của hệ thống...................................................................44
Hình 2.3 Biểu đồ trình tự UC Select new game ........................................................46
Hình 2.4 Biểu đồ cộng tác cho UC Select new game.................................................47
Hình 2.5 Biểu đồ trình tự UC Set CheckPoint............................................................48
Hình 2.6 Biểu đồ cộng tác UC Set Checkpoint..........................................................49
Hình 2.7 Biểu đồ trình tự UC “Undo To Checkpoint”...............................................51
Hình 2.8 Biểu đồ cộng tác UC “Undo To Checkpoint...............................................52
Hình 2.9 Biểu đồ trình tự UC “game setting”.............................................................53
Hình 2.10 Biểu đồ cộng tác UC “Game Setting”.......................................................53
Hình 2.11 Biểu đồ trình tự UC “Add new game”......................................................55
Hình 2.12 Biểu đồ cộng tác UC “Add new game”.....................................................56
Hình 2.13 Biểu đồ trình tự UC “Add/Edit Description”...........................................58
Hình 2.14 Biểu đồ cộng tác UC “Add/Edit Description”..........................................59
Hình 2.15 Biểu đồ trình tự UC “Filter Game”............................................................61
Hình 2.16 Biểu đồ cộng tác UC “Filter Game”..........................................................62
Hình 2.17 Biểu đồ lớp của hệ thống...........................................................................63

3


DANH MỤC TỪ VIẾT TẮT VÀ THUẬT NGỮ

Từ viết tắt/thuật ngữ

Giải thích

UC

Use Case – Ca sử dụng (chức năng)

CSDL

Cơ sở dữ liệu

Android SDK

Android Software Development Kits
(Bộ phát triển phần mềm Android)

HĐH

Hệ Điều Hành

ADT

Android Development Tool
(Công cụ phát triển Android)

AVD

Android Virtual Devices
(Thiết bị Android Ảo)


Puzzle

Màn chơi

4


MỤC LỤC
LỜI CẢM ƠN................................................................................................................1
LỜI CAM ĐOAN..........................................................................................................2
DANH MỤC CÁC BẢNG BIỂU.................................................................................3
DANH MỤC CÁC HÌNH ẢNH...................................................................................3
MỤC LỤC.....................................................................................................................5
MỞ ĐẦU.......................................................................................................................6
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT.............................................................................8
CHƯƠNG 2. XÂY DỰNG ỨNG DỤNG GAME SUDOKU..................................40
......................................................................................................................................63
TÀI LIỆU THAM KHẢO...........................................................................................72
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN........................................................73

5


MỞ ĐẦU
Công nghệ các thiết bị di động đã phát triển mạnh mẽ chỉ trong một thời gian
ngắn, đặc biệt là với các dòng điện thoại thông minh. Những chiếc điện thoại ngày
càng trở nên thông minh hơn, mạnh mẽ hơn, giá thành hạ, mẫu mã đẹp và bên cạnh
đó, chúng được trang bị những hệ điều hành mạnh mẽ. Có thể kể đến một số Hệ
điều hành phổ biến như Simbian, iOS, RIM, Window Mobile… Các hệ điều hành

này đều có những tính năng mạnh mẽ, hỗ trợ tốt cho việc xây dựng ứng dụng cho
điện thoại di động. Một hệ điều hành ra đời sau, tuy nhiên đã gây được sự chú ý của
người dùng cũng như của các nhà phát triển ứng dụng đó là hệ điều hành Android.
Android là một hệ điều hành mạnh mẽ không thua kém bất cứ hệ điều hành nào ra
đời trước đó. Điều đặc biệt nhất phải kể đến đó là Android, là một nền tảng mã
nguồn mở đầu tiên cho việc phát triển ứng dụng trên các thiết bị di động. Với ưu thế
là mã nguồn mở, việc phát triển ứng dụng trên nền Android trở nên dễ dàng hơn và
được hỗ trợ bởi các cộng đồng mã nguồn mở trên toàn thế giới.
Ngày nay, do nhu cầu đời sống của con người ngày càng được nâng cao trong
đó nhu cầu giải trí được quan tâm tới nhiều nhất. Chiếc điện thoại không chỉ đơn
thuần là một phương tiện để nghe - gọi - nhắn tin nữa mà thêm vào đó là chức năng
giải trí như: nghe nhạc, đọc báo, lướt web. Không khó để bắt gặp việc mọi người
cầm điện thoại chơi game, đọc tin, nghe nhạc… ở mọi nơi, mọi lúc. Một chiếc smart
phone hỗ trợ đủ các tính năng như nghe nhạc, chơi game là sự lựa chọn của đa số
người dùng. Trong đó, các ứng dụng game là phong phú nhất, đa dạng nhất.
Chính vì các lý do trên, em đã chọn đề tài “Tìm hiểu hệ điều hành Android
và xây dựng ứng dụng game Sudoku” cho đồ án tốt nghiệp của mình.
Nội dung chính của đồ án bao gồm:
CHƯƠNG I. CƠ SỞ LÝ THUYẾT
Chương này trình bày các kiến thức cơ bản về hệ điều hành Android, cách tạo
một ứng dụng trên nền Android, vòng đời của ứng dụng đó. Đồng thời, chương này

6


cũng trình bày các công cụ cần thiết để xây dựng một ứng dụng cũng như cách cài
đặt các công cụ này.
CHƯƠNG 2. XÂY DỰNG ỨNG DỤNG GAME SUDOKU
Chương này trình bày về nguồn gốc, các biến thể, luật chơi của game, quá
trình khảo sát, phân tích và thiết kế ứng dụng game Sudoku.

CHƯƠNG 3. CÀI ĐẶT CHƯƠNG TRÌNH
Chương này trình bày một số cài đặt cụ thể của chương trình

7


CHƯƠNG 1. CƠ SỞ LÝ THUYẾT
1.1 Android là gì
Một cách định nghĩa đầy đủ thì có thể coi Android là một nền tảng mở cho
thiết bị di động của Google (gồm hệ điều hành, middleware và một số ứng dụng cơ
bản). Bộ Android SDK (Software Development Kits – devkit) cung cấp các công cụ
và các API cần thiết để xây dựng các ứng dụng android sử dụng ngôn ngữ lập trình
java.
1.2 Lịch sử phát triển của Android
- Android là tên 1 công ty nhỏ được thành lập 10/2003 tại Palo Alto, bang
California, Mỹ. Vào 8/2005 Google mua lại công ty này. Những nhà đồng sáng lập
của Android chuyển sang làm việc tại Google gồm có Andy Rubin (đồng sáng lập
công ty Danger), Rich Miner (đồng sáng lập công ty Wildfire Communications),
Nick Sears (từng là phó chủ tịch của T-Mobile), và Chris White (trưởng nhóm thiết
kế và phát triển giao diện tại WebTV.
- Tại Google, nhóm do Rubin đứng đầu đã phát triển một nền tảng thiết bị di
động dựa trên hạt nhân Linux, được họ tiếp thị đến các nhà sản xuất thiết bị cầm tay
và các nhà mạng trên những tiền đề về việc cung cấp một hệ thống mềm dẻo, có khả
năng nâng cấp mở rộng cao.
- Google muốn Android trở thành 1 nền tảng mở và miễn phí, vì thế, đa số
các mã nguồn android được xuất bản dưới giấy phép mã nguồn mở. Bất cứ ai muốn
dùng Android cũng có thể download đầy đủ mã nguồn của nó. Đó là một sản phẩm
kết tinh từ ý tưởng của Khối Liên minh thiết bị cầm tay mở do Google dẫn đầu, gồm
34 thành viên với các công ty hàng đầu về công nghệ và di động toàn cầu như:
Qualcomm, Intel, Motorola, Texas Instruments và LG Electronics, các nhà mạng

như T-Mobile, Sprint Nextel, NTT DoCoMo và China Mobile…
- Các nhà phát triển có thể sử dụng miễn phí bộ Android Software
Development Kit (SDK) để xây dựng các ứng dụng của mình.

8


- Các phiên bản Android đã phát hành:
Phiên Bản
1.0
1.1
1.5
1.6
2.0
2.1
2.2
2.3/2.4
3.0
3.1/3.2

Ngày Phát Hành
9/2008
2/2009
4/2009
9/2009
10/2009
Eclair
5/2010
6/12/2010
2/2011

7/2011

Tên Gọi

Cupcake
Donut
Eclair
Eclair
Froyo
Gingerbread
Honeycomb

Bảng 1.1 Các phiên bản Android đã phát hành
1.3 So sánh Android với các HĐH khác và Android với J2ME
1.3.1 Android so với các HĐH khác
- Android được xây dựng mở để cho phép các nhà phát triển để tạo ra các
ứng dụng di động hấp dẫn tận dụng tất cả các chức năng một chiếc điện thoại đã
cung cấp. Một ứng dụng có thể gọi bất kỳ chức năng lõi sẵn có của thiết bị hiện tại
như thực hiện cuộc gọi, gửi tin nhắn… Android được xây dựng trên nhân Linux.
Hơn nữa, nó sử dụng một máy ảo tuỳ chỉnh được thiết kế để tối ưu hóa bộ nhớ và tài
nguyên phần cứng với nhiều thư viện mở rộng.
- Với Android khái niệm phần mềm lõi của điện thoại và các phần mềm được
cung cấp bởi hãng thứ 3 là không còn ranh giới. Một chương trình do người dùng tự
viết sẽ không khác gì so với phần mềm đi cùng máy do cả 2 đều có toàn quyền sử
dụng và triệu gọi các dịch vụ nền tảng của chiếc máy điện thoại vận hành trên nền
Android.
- Android cung cấp cách tiếp cận thống nhất cho việc phát triển ứng dụng.
Người phát triển chỉ cần phát triển ứng dụng cho Android và tất cả các ứng dụng của
họ sẽ chạy trên các thiết bị cầm tay khác được trang bị HĐH Android.


9


- Android là thực sự là một nền tảng đa nhiệm. Các nền tảng khác cũng có thể
làm được điều này tuy nhiên việc quản lý đa nhiệm của chúng có phần khó khăn và
kém khả thi.
- Android cho phép xây dựng các ROM tuỳ biến cho Android, điều này mang
lại khả năng tuỳ biến cao hơn.
- Android cho phép thay đổi các cài đặt nhanh hơn. Với các HĐH khác người
dùng thường gặp rắc rối với các thiết lập hệ thống mỗi khi họ muốn sử dụng các
thiết bị. Android thì cho phép bạn sử dụng các widget để quản lý các cài đặt trực
tiếp từ màn hình chính, những cài đặt ít được sử dụng có thể không có widget riêng,
tuy nhiên cũng có thể tạo Shortcut trên màn hình chính để có thể truy cập ngay đến
các thiết lập khi muốn thay đổi.
- Đồng bộ với máy tính và bộ nhớ, người dùng Android có thể copy dữ liệu
vào thẻ nhớ, đưa vào máy. Ngoài ra, việc đồng bộ với máy tính cũng đơn giản hơn,
thêm vào đó Android cũng hỗ trợ Flash, pin và thẻ nhớ có thể tháo rời và dễ dàng
thay mới, nâng cấp.
1.3.2 Android so với J2ME
a) Giống nhau
 Đều sử dụng nền tảng là ngôn ngữ lập trình java.
 Đều sử dụng máy ảo và các API có sẵn cho các nhà phát triển ứng
dụng.
b) Điểm khác nhau
 J2ME (Java 2 Micro Edition) là một nhánh của ngôn ngữ lập trình
Java để phát triển các ứng dụng trên điện thoại di động hay các thiết bị
cầm tay nhỏ gọn khác. Trong khi đó Android là một nền tảng gồm
HĐH, ngôn ngữ lập trình và các phần mềm trung gian khác.
 J2ME chạy trên các thiết bị di động có hỗ trợ java trong khi đó
Android chạy trên nền tảng của HĐH Android. J2ME đòi hỏi chương


10


trình phải nhỏ gọn do vậy bị hạn chế về bộ nhớ, kích thước file, đồ
hoạ, âm thanh, Android thì hỗ trợ tốt hơn.
 Android có thể can thiệp sâu vào phần cứng còn J2ME thì không. Bên
cạnh đó, J2ME biên dịch chương trình thành mã bytecode còn Android
biên dịch thành định dạng .dex, định dạng được tối ưu hoá cho việc
giảm dung lượng bộ nhớ.
1.4 Các tính năng của Android
- Storage (Lưu trữ): Android sử dụng SQLlite - một CSDL quan hệ nhỏ để
lưu trữ DL có cấu trúc.
- Kết nối (Connectivity): Android hỗ trợ GSM/EDGE, IDEN, CDMA, EVDO, UMTS, Bluetooth (bao gồm A2DP and AVRCP), WiFi, LTE, và WiMAX.
- Tin nhắn: Android hỗ trợ cả tin nhắn dạng SMS (Short Message Services)
và MMS (Multimedia Messaging Service).
- Tích hợp Trình duyệt Web (Web Browser): Dựa trên các bộ Webkit mã
nguồn mở (open Webkit) cùng với GoogleChrome V8 javascript.
- Hỗ trợ truyền trông (Media Support): Android hỗ trợ các định dạng âm
thanh, video phổ biến và các định dạng ảnh như: MPEG4, H.264, MP3, AAC,
AMR, JPG, PNG, GIF…
- Hỗ trợ phần cứng (Hardware Support): Accelerometer Sensor, Camera,
Digital Compass, Proximity Sensor, và GPS.
- Cảm ứng đa chạm (Multil Touch).
- Đa tác vụ (Multil Task).
- Hỗ trợ Flash: Android 2.3 hỗ trợ Flash 10.1
- Tethering (Chia sẽ kết nối internet tới các thiết bị khác).
1.5 Nhược điểm của Android
- Hệ điều hành bị phân mảnh: HĐH này vốn phân chia làm 2 nhánh, 1 cho
SmartPhone và 1 cho Tablet. Hiện tại có 8 phiên bản Android trên thị trường, việc


11


phân mảnh này gây khó khăn cho việc cập nhật Android từ phiên bản bất kỳ lên
phiên bản cao hơn.
- Có nhiều lỗ hổng bảo mật: Khi người sử dụng vô tình chấp nhận cài đặt 1
phần mềm độc hại nào đó, thiết bị chạy Android không có cách nào để tự bảo vệ.
Mặc dù Google cũng đã đưa ra một vài biện pháp bảo vệ người dùng như gỡ bỏ tất
cả malware và tài khoản của các nhà phát triển liên quan trên Android Market nhưng
điều này vẫn chưa đủ đảm bảo. Người dùng nên cài đặt các phần mềm bảo vệ để
tránh dính bẫy malware.
1.6 Kiến trúc của HĐH Android
HĐH Android được xây dựng từ 5 thành phần nằm trong 4 tầng khác nhau:

12


Hình 1.1 Kiến trúc HĐH Android
- Nhân Linux (Linux Kenel): Android được xây dựng dựa trên nhân Linux
phiên bản 2.6. Thành phần này chứa tất cả các dịch vụ lõi của hệ thống như: quản lý
bộ nhớ, quản lý tiến trình, giao tiếp phần cứng, bảo mật.. và điều khiển mọi hoạt
động của thiết bị. Tuy được phát triển dựa vào nhân linux nhưng thực ra nhân linux
đã được nâng cấp và sửa đổi rất nhiều để phù hợp với tính chất của những thiết bị
cầm tay như hạn chế về bộ vi xử lý, dung lượng bộ nhớ, kích thước màn hình, nhu
cần kết nối mạng không dây...
- Thành phần thư viện (Libraries): bao gồm 1 tập các thư viện được viết bằng
C/C++ cung cấp những tính năng chính cho một hệ điều hành android. Gồm một số
thư viện lõi như:
 SQLite: Hỗ trợ trong việc lưu trữ dữ liệu.

 LibWebCore: Để xây dựng trình duyệt web, hỗ trợ nhiều công nghệ
mạnh mẽ như HTML5, JavaScript, CSS, DOM, AJAX…
 FreeType: Dùng cho việc hiển thị ảnh và font chữ.

13


 Thư viện 3D: Sử dụng để tăng tốc độ phần cứng xử lý 3D hoặc tối ưu
hoá phần mềm 3D.
 Surface Manager: Quản lý việc hiển thị 2D và 3D.
 Media Libraries: Hỗ trợ phát hoặc thu lại các định dạng hình ảnh, âm
thanh, video thông dụng.
 System C: Dựa trên thư viện C chuẩn sử dụng cho HĐH hoặc nhúng
vào các thiết bị.
 SGL: Cung cấp các công cụ đồ hoạ 2D cơ bản.
- Android runtime: Thành phần này tại cùng một tầng với các thư viện, bao
gồm 1 tập các thư viên lõi cung cấp các chức năng sẵn có như trong thư viện lõi của
ngôn ngữ lập trình java, 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 máy ảo
Dalvik, cho phép mọi ứng dụng android chạy trong tiến trình 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. Dalvik thực thi file có định
dạng là .dex
- Bộ khung ứng dụng (Application framework): Bằng cách cung cấp 1 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 phong phú và sáng tạo. Thành phần này đưa ra các khả năng khác nhau
của HĐH và người phát triển có thể tự do tận dụng ưu điểm của thiết bị phần cứng,
truy cập thông tin, chạy các dịch vụ nền, thêm thông báo trên các thanh trạng thái và
nhiều hơn nữa. Cho phép nhà phát triển truy cập đến các API dùng bởi ứng dụng lõi.
Kiến trúc các ứng dụng được thiết kế để đơn giản hoá khả năng sử dụng lại của các

thành phần.
- Thành phần ứng dụng: Nằm ở tầng trên cùng của kiến trúc Android. Tại
tầng này ta có thể tìm thấy các ứng dụng có sẵn trong thiết bị Android, cũng như các
ứng dụng mà chúng ta download và cài đặt từ Android Market hay các chương trình
được viết tại tầng này. Các ứng dụng viết Android có những đặc tính sau :

14


 Viết bằng java và có phần mở rộng là .apk.
 Khi mỗi ứng dụng được chạy thì có 1 Virtual Machine riêng vì vậy mã
nguồn của ứng dụng được chạy trong sự cô lập với mã nguồn của các
ứng dụng khác.
 Theo mặc định, mỗi ứng dụng chạy trên một tiến trình Linux riêng của
mình. Android bắt đầu tiến trình khi bất kỳ thành phần nào của ứng
dụng cần được thực thi sau đó tắt tiến trình nếu không cần thiết hoặc
khi hệ thống cần khôi phục bộ nhớ cho các ứng dụng khác.
 Hệ điều hành Android là hệ thống đa người dùng, mỗi ứng dụng thuộc
về người dùng khác nhau. Do đó, theo mặc định, mỗi ứng dụng được
gắn ID của người sử dụng nhằm phân quyền khi sử dụng tài nguyên,
cấu hình phần cứng và hệ thống.
 Android là hệ điều hành đa nhiệm, điều đó có nghĩa rằng, tại một thời
điểm có thể có nhiều ứng dụng được chạy, tuy nhiên mỗi ứng dụng chỉ
có một thực thể (instance) duy nhất được chạy. Điều đó có tác dụng
hạn chế sự lạm dụng tài nguyên, giúp hệ thống hoạt động tốt hơn. Các
ứng dụng được phân quyền và tự hệ thống sẽ hủy nếu mức ưu tiên
thấp.
 Android là một hệ điều hành có tính mở, khác với nhiều hệ điều hành
di động khác, Android cho phép một ứng dụng của bên thứ ba được
phép chạy nền. Các ứng dụng đó chỉ có một hạn chế nhỏ đó là nó

không được phép sử dung quá 5~10% công suất CPU, điều đó nhằm
để tránh độc quyền trong việc sử dụng CPU.

15


1.7 Cấu trúc của một project Android
1.7.1 File AndroidManifest.xml
- AndroidManifest.xml là file yêu cầu phải có trong tất cả các ứng dụng
Android, nó được đặt ở thư mục gốc của ứng dụng và được tự động sinh ra ngay sau
khi ta tạo 1 project mới. Nó mô tả các biến toàn cục dùng trong gói ứng dụng, bao
gồm các thành phần ứng dụng như : Services, activity…
- Mỗi khi tạo ra 1 Activiy mới ta đều phải khai báo nó trong file này. Một
điều quan trọng được đề cập đến trong file AndroidManifest.xml là IntenFilter. Các
Filter này mô tả khi nào, và ở đâu các Activiy có thể được bắt đầu. Khi 1 Activity
hay hệ điều hành muốn thực hiện 1 hành động nào đó như mở 1 trang web, hay màn
hình contact nó tạo một đối tượng Intent. Đối tượng Intent này có thể chứa vài thông
tin mô tả người dùng muốn làm gì, cần những dữ liệu gì để thực hiện và một số
thông tin khác. Android sẽ so sánh các thông tin trong 1 đối tượng Intent với các
Intent Filter được khai báo trong file AndroidManifest.xml bởi mỗi ứng dụng và tìm
ra Activity phù hợp nhất để xử lý dữ liệu hoặc thực hiện 1 hành động cụ thể. Nếu có
nhiều Activity phù hợp với Intent đó thì người dùng sẽ được hỏi thành phần nào sẽ
được thực hiện.
- Cấu trúc của file AndroidManifest.xml được biểu diễn dưới dạng các tags.
Một số tags cơ bản gồm:
 <manifest> : Là nút gốc của mỗi file AndroidManifest.xml, nó chứa
đựng các thuộc tính của gói ứng dụng
 <uses-permission> : Bao gồm các thuộc tính chỉ định quyền truy
xuất và sử dụng tài nguyên của ứng dụng. Khi cần sử dụng một
loại tài nguyên nào đó thì trong file AndroidManifest .xml của ứng

dụng cần phải khai báo các quyền truy xuất.
 <application> : Là phần tử gốc, chứa các khai báo, các thành phần
được định nghĩa, sử dụng trong ứng dụng Android. Nó cũng bao gồm
các thuộc tính chung hay mặc định cho ứng dụng như icon, theme,

16


 <activity> : Mỗi Activity phải có 1 <activity> tag với tên tương ứng
trong file Androidmanifest.xml nếu không chúng ta sẽ không thể chạy
nó. Mỗi Activiy có thể chứa 1 hoặc nhiều Intent-Filter mô tả các hành
động mà Activity này hỗ trợ.

 <intent-filter>: Mô tả các loại Intent mà một thành phần ứng dụng có
thể hỗ trợ. Bên trong tag này có thể chứa nhiều tag khác như:
<action> , <category>, <data>, <meta-data>
 <service>: Một Services là một thành phần của ứng dụng và có thể
chạy ở chế độ nền trong một khoảng thời gian tùy ý. Cũng như
Activity chúng ta cũng có thể khai báo <intent-filter>, <meta-data>
cho mỗi Service.
: Một ContentProvider là một thành phần của ứng dụng
quản lý các dữ liệu liên tục và cho phép các thành phần khác truy cập
đến nó. Chúng ta có thể khai báo 1 hoặc nhiều <meta-data> cho một
ContentProvider.
1.7.2 File R.java
- R.java là file tự sinh khi ta tạo một project, nó tự động tạo chỉ số và quản lý
các thuộc tính được khai báo trong file xml và các tài nguyên của ứng dụng (như
hình ảnh, âm thanh…), tự động được cập nhật khi có thay đổi trong ứng dụng.
Chúng ta sử dụng lớp này trong mã lệnh như một cách nhanh nhất để tham chiếu
đến các tài nguyên đã khai báo trong ứng dụng.

1.7.3 Các tài nguyên dùng trong một ứng dụng Android
- Các file tài nguyên của một ứng dụng có liên quan rất chặt chẽ tới file
R.xml, các thay đổi trong các file tài nguyên sẽ được tự động thay đổi trong R.xml
- Các file tài nguyên của ứng dụng Android là các file ngoài (không chứa mã
lệnh) được sử dụng trong mã lệnh và biên dịch vào thời gian chạy của ứng dụng.
Android hỗ trợ nhiều loại file tài nguyên như: xml, jpg, png, mp3… Các file xml có
rất nhiều cấu trúc khác nhau tùy thuộc vào mục đích sử dụng cũng như cách thức

17


môt tả nó. Các tài nguyên dùng trong ứng dụng Android được tách rời với mã lênh,
các file xml được biên dịch sang dạng nhị phân, một định dạng giúp cho việc load
dữ liệu nhanh và hiệu quả hơn, các dữ liệu String sẽ được nén vào các hình thức lưu
trữ hiệu quả hơn.
- Các file tài nguyên được lưu trong thư mục /res của ứng dụng android, bao
gồm một số loại sau :
 Các file giao diện, chứa trong thư mục /res/layout: Các file này mô tả
cách thức bố trí của giao diện trong một Activity hay trong một thành
phần của giao diện người dùng
 Image file, đặt trong thư mục res/drawable: Android hỗ trợ các loại
ảnh như jpg, png, gif.
 Style, strings và arrays, chứa trong thư mục res/values
- Muốn sử dụng các tài nguyên đã định nghĩa trong các file xml của gói ứng
dụng ta chỉ cần gọi đến id của nó.
 Để gọi các tài nguyên của gói ứng dụng hiện tại, ta sử dụng cấu trúc:
R.resource_type.resource_name
 Để gọi các tài nguyên trong gói ứng dụng khác, ta sử dụng cấu trúc :
[package_name]. R.resource_type.resource_name
1.8. Các thành phần cơ bản của 1 ứng dụng Android

1.8.1 Activity
- Activity là 1 thành phần của ứng dụng cung cấp 1 màn hình mà người dùng
có thể tương tác theo thứ tự để thực hiện việc gì đó như: thực hiện cuộc gọi, chụp
ảnh, gửi Email, xem bản đồ… Một của sổ ứng dụng thường lấp đầy màn hình nhưng
cũng có thể nhỏ hơn hoặc nổi trên cùng của màn hình. Một Activity có thể sử dụng
cửa sổ bổ xung, ví dụ như một pop-up dialog gọi cho một đáp ứng người dùng ở
giữa của Activity, hay một cửa sổ biểu diễn những cho người dùng với thông tin
quan trọng khi họ chọn một item cụ thể trên màn hình.

18


- Một ứng dụng thường bao gồm 1 tập hợp các Activity được ràng buộc với
nhau. Thông thường trong ứng dụng có 1 Activity được gọi là Activity chính,
Activity này sẽ được hiện ra khi người sử dùng bắt đầu sử dụng ứng dụng. Một
Activity có thể bắt đầu các Activity khác theo thứ tự thực hiện các hành động khác
nhau. Mỗi lần 1 Activity mới được bắt đầu thì các Activity trước bị dừng lại, hệ
thống bảo tồn các Activity này trong 1 ngăn xếp (gọi là backstack). Khi người dùng
thao tác xong với Activity hiện tại và nhấn nút BACK thì Activity này bị huỷ và
Activity trước được khôi phục.
- Giao diện người dùng cho các Activity được xây dựng bởi kiến trúc phân
cấp các đối tượng View dẫn xuất từ lớp View. Mỗi View chiếm một khoảng không
gian hình chữ nhật bên trong cửa sổ của Activity và có thể đáp ứng được các tương
tác người dùng. Một cấu trúc phân cấp các view được gắn vào Activity thông qua
phương thức: Activity.setContentView().
- Android cung cấp sẵn một số view cho phép người dùng sử dụng để thiết kế
và tổ chức các layout. Widget là view cung cấp các thành phần trực quan và tương
tác cho màn hình như: button, textfield, checkbox hoặc chỉ là 1 hình ảnh…
- Layout là views được dẫn suất từ ViewGroup cung cấp một mô hình bố trí
nhất định cho các view con của nó như: linerLayout, GridLayout, RelativeLayout.

Cách phổ biến để tạo ra layout cho ứng dụng là sử dụng file XML được lưu trong
thư mục của ứng dụng. Bằng cách này chúng ta có thể duy trì các thiết kế của giao
diện người dùng tách biệt với mã nguồn khai báo các hành vi của Activity.
- Mỗi Activity phải được khai báo trong file AndroidManifest.xml. Mỗi
Activity có thể truyền hay nhận dữ liệu từ Activity khác.
- Một tác vụ trong một ứng dụng Android là một ngăn xếp các Activiy. Khi
một Activity mới được start, nó được đặt ở đỉnh của stack và trở thành activity đang
chạy Activity trước sẽ ở 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.

19


Hình 1.2 Android Back Stack
* Vòng đời của 1 Activity:
 onCreate(): Được gọi khi hoạt động được tạo ra lần đầu tiên. Luôn
theo sau bởi onStart(). Đây là lúc lập trình viên cần thiết lập tất cả các
cài đặt tĩnh cơ bản, như khởi tạo các view, ràng buộc dữ liệu vào danh
sách.
 onStart(): Được gọi ngay khi ứng dụng được nhìn thấy với người
dùng. Theo sau bởi onResume() nếu ứng dụng bắt đầu hoạt đông.
Hoặc onStop() nếu ứng dụng bị ẩn đi.
 onResume(): Được gọi ngay khi Activity tương tác với người dùng,
lúc này Activity ở trên đỉnh của ngăn xếp. luôn theo sau bởi
onPause().
 onPause(): Được gọi khi hệ thống bắt đầu khôi phục lại các activity
khác. Phương thức này được dùng để thực hiện các thay đổi chưa
được lưu, tạm dừng các hành vi có thể tiêu thụ CPU, theo sau bởi


20


OnResume khi Activity được khôi phục hoặc onStop() nếu nó trở nên
vô hình với người dùng.
 onStop(): Được gọi khi ứng dụng không còn được nhìn thấy. Hành
động này sảy ra khi nó bị huỷ hoặc Activity khác đã được khôi phục.
Theo sau bởi onRestart() nếu Activity trở lại và tương tác với người
dùng, hoặc theo sau là onDestroy() nếu ứng dụng kết thúc.
 onDestroy(): Được gọi khi Activity bị huỷ. Nó có thể được gọi khi
Activity kết thúc hoặc hệ thống tạm thời phá huỷ nó để bảo tồn bộ
nhớ.
onRestart(): Được gọi ngay khi Activity được bắt đầu trở lại. Luôn
theo sau bởi onStart().

Hình 1.3 Vòng đời của Activity

21


- Một Activity có thể gọi đến 1 Activity khác thông qua 1 Intent. Việc gọi
đến 1 Activity khác có thể có dữ liệu trả về từ Activity được gọi hoặc có thể không
trả về dữ liệu nào.
 Để gọi 1 Activity khác nhưng không cần trả về dữ liệu nào, ta dùng
phương thức startActivity()
 Để gọi 1 Activity khác những cũng cần có DL trả về ta dùng phương
thức startActivityForResult(). Khi đó, Activity được gọi sẽ trả lại DL
cho Activity gọi nó sau khi hoàn thành qua phương thức finish().
Activity ban đầu lấy dữ liệu được gửi tới bởi phương thức
onActivityResult().

* Các loại Activity
- ListActivity là 1 Activity hiển thị danh sách các items bằng cách liên kết với
1 nguồn dữ liệu như một mảng, một con trỏ và nắm bắt các sự kiện khi người dùng
chọn 1 item trong danh sách. Một ListActivity có một layout mặc định bao gồm 1
danh sách đơn ở giữa của màn hình. Tuy nhiên, nếu muốn chúng ta cũng có thể tùy
chọn giao diện bằng cách thiết lập layout của chúng ta với setContentView() trong
phương thức onCreate().
- PreferenceActivity: Khi chúng ta xây dựng 1 ứng dụng Android, thông
thường chúng ta muốn có một số tùy chọn cho ứng dụng như: Cách thức hiện thị,
giao diện tùy chọn, cài đặt ứng dụng hay chia sẻ thông tin với các thành phần
khác… Các tùy chọn này sẽ được lưu trữ trong bộ nhớ trong của thiết bị gọi là các
Shared Preferences. Android cung cấp 1 số cơ chế để thực hiện việc này, một trong
số đó là lớp preferenceActivity. Để làm được điểu này trước hết ta cần khai báo 1
file xml chứa các Preferences file này được đặt trong thư mục res/xml. Tiếp theo ta
cần tạo 1 Activity kế thừa từ lớp PreferenceActivity. Trong phương thức onCreate()
ta gọi phương thức addPreferencesFromResource(int xmlResource) để gắn các
Preferences vào Activity. Sau đó trong ứng dụng ta có thể truy cập đến các Shared

22


Preference thông qua tên của chúng như đã khai báo trong file xml bằng thuộc tính
“android:key”.
1.8.2 Services
- Thành phần dịch vụ không cung cấp giao diện người dùng mà chỉ chạy ở
chế độ nền, trong khoảng thời gian không xác định. Các thành phần khác của ứng
dụng có thể bắt đầu các dịch vụ và nó sẽ tiếp tục chạy dưới chế độ nền ngay cả khi
người dùng chuyển sang 1 chế độ khác. Một thành phần có thể tương tác với các
dịch vụ và thậm chí là thực hiện các tiến trình giao tiếp.
- Một Services có thể có 2 dạng:

 Started: Services là Started khi 1 thành phần ứng dụng (có thể là
Activity) bắt đầu nó bằng cách gọi

startService(Intent it).

Khi bắt đầu

1 Services có thể chạy ở chế độ nền vô thời hạn ngay cả khi thành
phần bắt đầu bị huỷ. Thông thường 1 start services thực hiện 1 thao tác
đơn lẻ và không trả về kết quả.
 Bound: Một service là Bound khi 1 thành phần liên kết đến nó bằng
cách gọi

bindService().

Một Bound service cung cấp giao diện Client

– Server cho phép các thành phần tương tác với các dịch vụ, gửi yêu
cầu, nhận kết quả, hoặc làm tương tự như vậy với các tiến trình truyền
thông.
1.8.3 Broadcast Receiver
- Một Broadcast Receiver là một thành phần nhận và đáp lại các thông báo
broadcast trên toàn bộ hệ thống. Nhiều broadcast được bắt nguồn từ hệ thống 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 Broadcast 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.


23


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
thanh…
- Bởi vì hệ thống chạy mỗi ứng dụng trong một tiến trình riêng biệt với các
quyền truy cập file hạn chế truy cập các ứng dụng khác, ứng dụng của bạn có thể
không trực tiếp kích hoạt một thành phần từ một ứng dụng khác. Vì vậy, để kích
hoạt một thành phần trong ứng dụng khác, người dùng phải gửi một thông điệp tới
hệ thống xác định mục đích và bắt đầu 1 thành phần cụ thể. Hệ thống sau đó kích
hoạt các thành phần này.
- Để tạo ra một thành phần Broadcast Receiver ta có thể dùng 2 cách: khai
báo trong file AndroidManiFest.xml hoặc trong kế thừa lớp BroadcastReceiver trong
mã lệnh của chương trình.
1.8.4 Content provider
- Content provider lưu trữ và lấy dữ liệu và làm cho nó có thể được truy cập
từ tất cả các ứng dụng. Đây là cách duy nhất để chia sẻ dữ liệu giữa các ứng dụng,
không có không gian lưu trữ chung mà các gói Android có thể truy cập. 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 phương thức cho phép các ứng dụng khác lấy, thao tác và lưu trữ dữ
liệu mà không cần sử dụng nhiều lệnh SQL. 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 được tạo
ra bằng cách gọi getContentResolver() bên trong hoạt động của Activity hay của các
thành phần ứng dụng, hoặc chúng ta cũng có thể tạo ra các Content Provider riêng.
ContentResolver cr = getContentResolver();
- Content provider cung cấp cho chúng ta một đối tượng con trỏ, giúp chúng
ta có thể dễ dàng lấy được dữ liệu nào chỉ cần cung cấp đường dẫn cho nó. Đường

dẫn này gọi là URI. Một đối tượng URI xác định duy nhất một tập dữ liệu. Content

24


provider kiểm soát nhiều tập dữ liệu và đưa ra một đối tượng URI riêng biệt cho mỗi
tập dữ liệu đó. Cấu trúc của một URI như sau:
<standard_prefix>://<authority>/<data_path>/<id>
Trong đó:
 standard_prefix : Tiền tố chuẩn cho Content Provider, luôn là content://
 authority: Tên của Content Provider, ví dụ : “contacts” trong ứng dụng
Contact của điện thoại. Nếu là Content Provider của một hãng thứ ba thì nó
có thể là tên đầy đủ như: “com.wrox.provider” hay
“net.learn2develop.provider”…
 data_path: Đường dẫn tới dữ liệu yêu cầu. Ví dụ: Nếu chúng ta muốn lấy dữ
liệu từ ứng dụng Contact thì data_path là “people”, khi đó URI có dạng:
content://contacts/people.
 id: Xác định bản ghi cần lấy. Ví dụ: Nếu ta muốn lấy người thứ hai trong ứng
dụng Contact thì URI sẽ là:
content://contacts/people/2
1.8.5 Intent
- Ba thành phần lõi của 1 ứng dụng: Services, Activities, Broadcast
Receivers, đều được gọi qua 1 thông điệp gọi là Intent. Intent là điều kiện ràng buộc
cuối cùng giữa các thành phần trong cùng 1 ứng dụng hoặc trong các ứng dụng khác
nhau.
- Một Intent là 1 mô tả trừu tượng của hành động sẽ được thực hiện. Nó có
thể dùng với hàm startActivity() để khởi động 1 Activity, dùng broadcastIntent() để
gửi Intent đến bất kỳ thành phần BroadcastReceiver nào hoặc dùng với startServices
hoặc bindServices để giao tiếp với 1 dịch vụ chạy nền của hệ thống.
- Có intent tường minh và trừu tượng:

 Intent tường minh (Explicit): thường được sử dụng trong các ứng dụng
(như 1 lớp trong ứng dụng đó)
 Intent trừu tượng (Implicit): Không chỉ rõ tên lớp được gọi mà chỉ ra
action được thực thi và cung cấp URL được dùng bởi action này. Khi

25


×