Tải bản đầy đủ (.docx) (75 trang)

Báo cáo chuyên đề Quản lý danh bạ trên Android

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.38 MB, 75 trang )

CÁC KÝ HIỆU VIẾT TẮT
Ký hiệu, viết tắt và thuật
ngữ
Giải nghĩa
SDK Software develop kit
Android Platform Nền tảng Android
Soft-keyboard Bàn phím ảo trong điện thoại
VM Visual Machine (Máy ảo)
Android Emulator
Thiết bị giả lập điện thoại Android để chạy các ứng
dụng.
Activity
(danh từ) Một đối tượng trong Android. Cần phân
biệt với động từ active
Running Trạng thái đạng thực thi của một ứng dụng
Issue Vấn đề phát sinh trong quá trình xây dựng ứng dụng
Bug Lỗi phát sinh trong quá trình xây dựng ứng dụng
Uri
Đường dẫn chỉ đến các dữ liệu trong hệ thống
Android
Content Provider
Một thành phần trong hệ thống Android hỗ trợ truy
vấn vào các dữ liệu trong hệ thống.
Callback
Gọi lại một hàm nào đó khi xảy ra một sự kiện
tương ứng.
SIM Thẻ SIM điện thoại
Trang 1
MỤC LỤC
\
MỞ ĐẦU


Ngày nay, xu thế của xã hội thông tin đang chuyển dần sang lĩnh vực công nghệ di
động nói chung và điện thoại di động nói riêng. Minh chứng cho điều đó là sự ra đời
của hai dòng điện thoại smartphone Android và iPhone. Tuy nhiên, hiện nay tiêu điểm
gây chú ý nhất trong xã hội thông tin vẫn là nền tảng Android của Google.
Android là một nền tảng phần mềm mở dựa trên nhân hệ điều hành Linux và đánh
giá là một nền tảng công nghệ phổ biến trong nhiều lĩnh vực trong tương lai. Hiện nay,
Android đã thu hút được sự quan tâm của các nhà sản xuất điện thoại di động lớn trên
thế giới và mức tăng trưởng của Android vượt lên dẫn đầu so với iPhone, Nokia và
nhiều hãng khác.
Ở nước ta, Android thực sự là một mảnh đất màu mỡ mà các công ty phần mềm
khai thác. Điều này cũng kéo theo việc cơ hội việc làm cho sinh viên mới ra trường
cũng nhiều hơn. Ngoài ra, Android là một nền tảng mở và được viết bằng ngôn ngữ
Trang 2
Java nên đây là một điểm rất thuận lợi để cho nhiều người có thể dễ dàng bắt tay vào
nghiên cứu cũng như dễ dàng tiếp cận công nghệ.
Ngoài ra, việc sử dụng một chiếc điện thoại di động ngay nay đã không chỉ đơn
thuần là để gọi và nhắn tin mà thêm vào đó là rất nhiều các chức năng tiện ích khác
giúp người dùng có thể quản lý công việc một cách hiệu quả và an toàn nhất. Một trong
số đó là việc quản lý các Contact (thông tin liên lạc) trong điện thoại. Bất kỳ một chiếc
điện thoại nào cũng cần phải có một trình quản lý Contact giúp người dùng lưu trữ, tìm
kiếm Contact một cách nhanh chóng, dễ dàng và nhất là đối với một chiếc smartphone
Android thì yếu tố an toàn là không thể thiếu.
Để giải quyết vấn đề này em đã tìm hiểu và xây dựng ứng dụng Quản lý danh bạ
trên Android. Mặc dù, cũng đã có những ứng dụng tương tự trên Android cho phép
quản lý và lưu trữ Contact một cách an toàn nhưng hướng nghiên cứu của tôi là bằng
cách lưu trữ dữ liệu trên một server riêng không phải là dựa vào Gmail như các ứng
dụng khác. Việc lưu trữ dữ liệu Contact trên một server riêng cho phép dễ dàng mở
rộng các tính năng trong tương lai mà không bị phụ thuộc vào các dịch vụ trực tuyến.
Đồng thời, cũng dễ dàng chia sẽ dữ liệu và các thông tin liên lạc.
Mục đích chính khi thực hiện đề tài này là nhằm tiếp cận, nghiên cứu và khai thác

nền tảng phần mềm mở Android để tạo ra một phần mềm có tính thực tiễn cao, ứng
dụng hiệu quả vào cuộc sống. Báo cáo của đề tài bao gồm 3 chương:
Chương 1: Giới thiệu các vấn đề lý thuyết liên quan.
Chương 2: Đặt vấn đề, trình bày giải pháp, phân tích và thiết kế.
Chương 3: Triển khai ứng dụng và demo.
Trang 3
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1. Sơ lược về các hệ điều hành
1.1.1 Khái niệm hệ điều hành
Hệ điều hành (operating system) là chương trình chạy trên hệ thống máy tính, quản
lý các tài nguyên trên máy tính và là môi trường cho các chương trình ứng dụng chạy
trên nó. Ngày nay, khái niệm hệ điều hành không chỉ là trên máy vi tính mà còn được
mở rộng cho nhiều thiết bị điện tử khác chẳng hạn như điện thoại thông minh
(smartphones), máy tính bảng (tablet computers) và hiện nay là cả trên một số đầu phát
HD, HD Player, TV, các thiết bị cầm tay PDA
Như vậy hệ điều hành di động là hệ điều hành chạy trên hệ thống máy có tính di
động cao. Với đặc thù đó, hệ điều hành di động phải có những khả năng đặc biệt mà
những hệ điều hành thông thường không có được. Chẳn hạn như nó phải chạy trên hệ
thống máy có cấu hình máy hạn chế về tốc độ bộ vi xử lý, bộ nhớ sử dụng, phải chạy
được ổn định liên tục trong một thời gian dài mà chỉ sử dụng một lượng điện năng nhỏ,
trong suốt thời gian chạy đó có thể duy trì các kết nối mạng không dây để đảm bảo việc
liên lạc.
1.1.2 Một số hệ điều hành tiêu biểu
- Trên máy tính cá nhân : MS Dos, MS Window, Mac OS, Linux, Unix…
- Trên điện thoại thông minh : Android, Sybian, Window Mobile, iOS, RIM OS,
Bada OS, Palm OS.
- Ngoài ra còn có các hệ điều hành chạy trên mainframe, server, thẻ chíp,
1.1.3 Các chức năng chính của hệ điều hành
Quản lý chia sẻ tài nguyên.Tài nguyên ở đây là bao gồm:
- Tài nguyên phần cứng (CPU, Bộ nhớ, các thiết bị IO).

- Tài nguyên phần mềm (Các file, chương trình dùng chung).
Trang 4
Tạo lập môi trường ảo ít phụ thuộc vào phần cứng để các phần mềm ứng dụng hoạt
động, phục vụ người dùng.
1.1.4 Các thành phần của hệ điều hành
- Thành phần quản lý tiến trình.
- Thành phần quản lý bộ nhớ.
- Thành phần quản lý nhập xuất.
- Thành phần quản lý tập tin.
- Thành phần bảo vệ hệ thống.
- Thành phần dịch lệnh.
- Thành phần quản lý mạng.
1.1.5 Phân loại hệ điều hành
• Theo loại thiết bị mà hệ điều hành hoạt động:
- Hệ điều hành dành cho máy MainFrame.
- Hệ điều hành dành cho máy Server.
- Hệ điều hành dành cho máy nhiều CPU.
- Hệ điều hành dành cho máy tính cá nhân (PC).
- Hệ điều hành dành cho máy PDA.
- Hệ điều hành dành cho máy chuyên biệt.
- Hệ điều hành dành cho thẻ chíp (SmartCard).
• Theo số user và số chương trình cùng hoạt động:
- Hệ điều hành đơn nhiệm một người dùng.
- Hệ điều hành đa nhiệm một người dùng.
- Hệ điều hành đa nhiệm nhiều người dùng.
• Theo góc độ người dùng:
Một người dùng hay nhiều người dùng (Mạng ngang hàng, mạng có máy chủ).
Trang 5
• Theo hình thức xử lý:
- Hệ thống xử lý theo lô.

- Hệ thống xử lý theo lô đa chương.
- Hệ thống chia sẻ thời gian.
- Hệ thống song song.
- Hệ thống phân tán.
- Hệ thống xử lý thời gian thực.
1.1.6 So sánh giữa các hệ điều hành
1.1.7 So sánh giữa hệ điều hành di động và hệ điều hành trên desktop
Giống nhau: về bản chất hệ điều hành, những thành phần lõi hệ điều hành.
Khác nhau:
- Hệ điều hành di động: hoạt động trên các thiết bị nhỏ gọn, hạn chế nhất là về
vấn đề năng lượng. Pin thì có hạn, vì thế tất cả các thành phần trên thiết bị
đều phải tối ưu để tiết kiệm pin, điều đó nảy sinh nhiều mâu thuẫn với nhu
cầu sử dụng của người dùng.
• Màn hình càng lớn và càng sáng thì sẻ tốn điện càng nhiều.
• Bộ nhớ lớn thì chi phí về điện cũng sẻ cao.
• Bộ vi xử lý càng nhanh thì càng tốn điện. Điều đó chưa kể đến việc
thiết bị di động thì phải nhỏ gọn, nhẹ nhàng, vì vậy càng đè nặng việc
phải tối ưu phần cứng. Khi đó hệ điều hành di động cũng có trách
nhiệm phải tối ưu hoạt động của mình để tiết kiệm năng lượng một
cách tối đa.
• Nó phải quản lý các ứng dụng không để các ứng dụng chạy chiếm quá
nhiều tài nguyên, tránh sự độc quyền, xung đột, tranh chấp tài nguyên
giữa các ứng dụng trong khi các hệ điều hành chạy desktop thì ít chú ý
hơn. Hệ điều hành di động luôn có bộ công cụ quản lý điện năng sử
dụng trong máy, trong những tình huống cần thiết thì hệ thống sẻ tự
Trang 6
tắt những ứng dụng không cần thiết để duy trì các chương trình cần
thiết hơn hoạt động.
• Đa số các hệ điều hành trên desktop đều cho phép nhiều ứng dụng
chạy đồng thời (đa nhiệm) và khá tự do. Trong khi đó, các hệ điều

hành chạy trên di động thường không cho phép chạy đa nhiệm, hoặc
có đa nhiệm thì các ứng dụng bị giới hạn khá nhiều.
- Việc hiển thị giao diện trên một khung hình nhỏ cũng điều khó khăn hơn so
với hệ điều hành chạy trên desktop, thường thì trên hệ điều hành di động gần
như không có giao diện cửa sổ cho phép nhiều ứng dụng cùng hiển thị một
lúc mà chỉ là một giao diện mà trên đó mỗi thời điểm chỉ hiển thị một giao
diện của một ứng dụng mà thôi.
- Hệ điều hành di động phải có khả năng hoạt động liên tục không ngừng nghỉ
để đảm bảo liên lạc, đảm bảo kết nối của thiết bị tới mạng không dây cần kết
nối trong khi vẫn di chuyển. Vì thế cần được thiết kế đặc biệt hơn so với hệ
điều hành trên desktop.
1.1.8 So sánh hệ điều hành android với các hệ điều hành di động khác
Giống nhau: Đều là hệ điều hành di động nên mang đầy đủ bản chất của hệ điều
hành di động nói chung. (Đã đề cập ở trên)
Khác nhau:
- Android là hệ điều hành mã nguồn mở và miễn phí trong khi các hệ điều
hành di động còn lại đều là nguồn đóng và có phí (khi một hãng thứ hai sử
dụng).
- Android được phát triển từ nhân linux do đó nó có thể chạy tốt trên nhiều
dòng điện thoại khác nhau. Có độ tương thích cao với các loại phần cứng
khác nhau nhiều hơn so với các hệ điều hành di động còn lại.
- Các ứng dụng chạy trên android được viết bằng Java trong khi đó, ứng dụng
trên các hệ điều hành khác chủ yếu là viết bằng C/C++/Object C. Ngay cả
Trang 7
Symbian có hỗ trợ Java thì cũng khác so với Android, trong khi hệ điều hành
Android sử dụng máy ảo Java là Dalvik VM do chính Google phát triển thì
Symbian lại sử dụng máy ảo Java là J2ME của Sun.
1.2 Android là gì?
Android là một hệ điều hành di động dựa trên nền tảng Linux dành cho các dòng
điện thoại smartphones, tablet computers (và hiện nay là cả trên một số đầu phát HD,

HD Player, TV). Đầu tiên được ra đời bởi công ty liên hợp Android Inc, sau đó được
Google mua lại và phát triển từ năm 2005 và trở thành một hệ điều hành di động mã
nguồn mở, miễn phí, mạnh mẽ và được ưa chuộng cao trên thế giới.
Hệ điều hành Android một hệ điều hành rất mạnh mạnh, có bảo mật cao, hỗ trợ
được nhiều công nghệ tiên tiến như 3G, GPS, EDGE, Wifi tương thích với nhiều
phần cứng, hỗ trợ nhiều loại bộ nhập dữ liệu như keyboard, touch và trackball.
Android là hệ điều hành di động nên có khả năng kết nối cao với các mạng không dây.
Hỗ trợ công nghệ OpenGL nên có khả năng chơi các phương tiện media, hoạt hình
cũng như trình diễn các khả năng đồ họa khác cực tốt, là tiền đề để phát triển các ứng
dụng có giao diện phức tạp chẳng hạn như là các trò chơi.
Android liên tục được phát triển, mỗi bản cập nhật từ Google là mỗi lần Android
được tối ưu hóa để hoạt động tốt hơn, nhanh và ổn định hơn, hỗ trợ thêm công nghệ
mới. Chẳng hạn như theo một đánh giá thì Android phiên bản 2.2 hoạt động nhanh hơn
bản 2.1 tới 450%. Hiện nay, phiên bản mới ổn định là 3.2 phát hành 7/2011 với tên gọi
theo “họ” 3.x trước đó là Honeycomb. Tuy nhiên phiên bản Android tiếp theo – tên mã
Trang 8
Hình 1-1 Logo Android
Ice Cream Sandwich (Android 4.0) – trong quá trình được Google hoàn thiện và được
tung ra vào quý 4 năm 2011.
Hình 1-2 Sự phân bố của các phiên bản Android tính đến ngày 03/10/2011
Năm 2008, hệ điều hành Android đã chính thức mở toàn bộ mã nguồn, điều đó cho
phép các hãng điện thoại có thể đem mã nguồn về tùy chỉnh, thiết kế lại sao cho phù
hợp với mỗi mẫu mã điện thoại của họ và điều quan trọng nữa là hệ điều hành mở này
hoàn toàn miễn phí, không phải trả tiền nên giúp họ tiết kiệm khá lớn chi phí phát triển
hệ điều hành. Những điều đó là cực kỳ tốt không chỉ đối với các hãng sản xuất điện
thoại nhỏ mà ngay cả với những hãng lớn như Samsung, HTC
Với Google, vì Android hoàn toàn miễn phí, Google không thu tiền từ những hãng
sản xuất điện thoại, tuy không trực tiếp hưởng lợi từ Android nhưng bù lại, những dịch
vụ của hãng như Google Search, Google Maps, nhờ có android mà có thể dễ dàng
xâm nhập nhanh vào thị trường di động vì mỗi chiếc điện thoại được sản xuất ra đều

được tích hợp hàng loạt dịch vụ của Google. Từ đó hãng có thể kiếm bội, chủ yếu là từ
các nguồn quảng cáo trên các dịch vụ đó.
Với các nhà phát triển ứng dụng (developers), việc hệ điều hành android được sử
dụng phổ biến đồng nghĩa với việc họ có thể thoải mái phát triển ứng dụng trên nền
android với sự tin tưởng là ứng dụng đó sẻ có thể chạy được ngay trên nhiều dòng điện
thoại của các hãng khác nhau. Họ ít phải quan tâm là đang phát triển cho điện thoại
nào, phiên bản bao nhiêu vì nền tảng android là chung cho nhiều dòng máy, máy ảo
Trang 9
Java đã chịu trách nhiệm thực thi những ứng dụng phù hợp với mỗi dòng điện thoại mà
nó đang chạy. Tất cả các chương trình ứng dụng được viết bằng ngôn ngữ Java kết hợp
với XML nên có khả năng khả chuyển cao.
Một số hãng sản xuất điện thoại có sử dụng hệ điều hành Android tiêu biểu: HTC,
LG, MOTOROLA, SAMSUNG, SONY, ACER, Ở Việt Nam các công ty như Viettel,
FPT đãng tung những sản phẩm chạy android cho riêng mình. Ngoài ra còn nhiều hãng
điện thoại vừa và nhỏ khác nữa cũng sử dụng hệ điều hành android trong sản phẩm của
mình
1.3 Delving với máy ảo Dalvik
Dalvik là máy ảo giúp các ứng dụng java chạy được trên các thiết bị động Android.
Nó chạy các ứng dụng đã được chuyển đổi thành một file thực thi Dalvik (dex). Định
dạng phù hợp cho các hệ thống mà thường bị hạn chế về bộ nhớ và tốc độ xử lý. Dalvik
đã được thiết kế và viết bởi Dan Bornstein, người đã đặt tên cho nó sau khi đến thăm
một ngôi làng đánh cá nhỏ có tên là Dalvík ở đảo Eyjafjörður, nơi mà một số tổ tiên của
ông sinh sống.
Từ góc nhìn của một nhà phát triển, Dalvik trông giống như máy ảo Java (Java
Virtual Machine) nhưng thực tế thì hoàn toàn khác. Khi nhà phát triển viết một ứng
dụng dành cho Android, anh ta thực hiện các đoạn mã trong môi trường Java. Sau đó,
nó sẽ được biên dịch sang các bytecode của Java, tuy nhiên để thực thi được ứng dụng
này trên Android thì nhà phát triển phải thực thi một công cụ có tên là dx. Đây là công
cụ dùng để chuyển đổi bytecode sang một dạng gọi là dex bytecode. "Dex" là từ viết tắt
của "Dalvik executable" đóng vai trò như cơ chế ảo thực thi các ứng dụng Android.

1.4 Kiến trúc của Android
Mô hình sau thể hiện một cách tổng quát các thành phần của hệ điều hành Android.
Mỗi một phần sẽ được đặc tả một cách chi tiết dưới đây.
Trang 10
Hình 1-3 Cấu trúc stack hệ thống Android
1.4.1 Tầng ứng dụng (application)
Đây là lớp ứng dụng giao tiếp với người dùng, bao gồm các ứng dụng như:
- Các ứng dụng cơ bản được tích hợp sẵn như: gọi điện (Phone), quản lý danh bạ
(Contacts), duyệt web (Browser), nhắn tin (SMS), lịch làm việc (Calendar), đọc
e-mail (Email-Client), bản đồ (Map), quay phim chụp ảnh (camera)
- Các ứng dụng được cài thêm như các phần mềm chứng khoán (Stock), các trò
chơi (Game), từ điển
Các chương trình có các đặc điểm là:
- Viết bằng ngôn ngữ Java, phần mở rộng là apk.
- Khi mỗi ứng dụng được chạy, nó có một phiên bản Virtual Machine được dựng
lên để phục vụ cho nó. Nó có thể là một Active Program : Chương trình có giao
diện với người sử dụng hoặc là một background: chương trình chạy nền hay là
dịch vụ.
- Android là hệ điều hành đa nhiệm, điều đó có nghĩa là trong cùng một thời điểm,
có thể có nhiều chương trình cùng chạy một lúc, tuy nhiên, với mỗi ứng dụng thì
Trang 11
có duy nhất một thực thể (instance) được phép chạy mà thôi. Đ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 gán số ID của người sử dụng nhằn phân định quyền hạn khi
sử dụng tài nguyên, cấu hình phần cứng và hệ thống.
- 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ử dụng quá
5~10% công suất CPU, điều đó nhằn để tránh độc quyền trong việc sử dụng
CPU.

- Ứng dụng không có điểm vào cố định, không có phương thức main để bắt đầu.
1.4.2 Tầng Application framework
Bằng cách cung cấp 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. Nhà phát triển
được tự do tận dụng các thiết bị phần cứng, thông tin địa điểm truy cập, các dịch vụ
chạy nền, thiết lập hệ thống báo động, thêm các thông báo để các thanh trạng thái, và
nhiều, nhiều hơn nữa.
Nhà phát triển có thể truy cập vào các API cùng một khuôn khổ được sử dụng bởi
các ứng dụng lõi. Các kiến trúc ứng dụng được thiết kế để đơn giản hóa việc sử dụng
lại các thành phần; bất kỳ ứng dụng có thể xuất bản khả năng của mình và ứng dụng
nào khác sau đó có thể sử dụng những khả năng (có thể hạn chế bảo mật được thực thi
bởi khuôn khổ). Cơ chế này cho phép các thành phần tương tự sẽ được thay thế bởi
người sử dụng.
Cơ bản tất cả các ứng dụng là một bộ các dịch vụ và các hệ thống, bao gồm:
- Một tập hợp rất nhiều các View có khả năng kế thừa lẫn nhau dùng để thiết kế
phần giao diện ứng dụng như: gridview, tableview, linearlayout,…
Trang 12
- Content Provider: cho phép các ứng dụng có thể truy xuất dữ liệu từ các ứng
dụng khác (chẳng hạn như Contacts) hoặc là chia sẻ dữ liệu giữa các ứng dụng
đó.
- Activity Manager: Quản lý các chu kỳ sống của một ứng dụng cũng như cung
cấp công cụ điều khiển các Activity.
- Telephony Manager: Cung cấp công cụ để thực hiện việc liên lạc như gọi điện
thoại.
- XMPP Service: Cung cấp công cụ để liên lạc trong thời gian thực.
- Location Manager: Cho phép xác định vị trí của điện thoại thoại dựa vào hệ
thống định vị toàn cầu GPS và Google Maps.
- Window Manager: Quản lý việc xây dựng và hiển thị các giao diện người dùng
cũng như tổ chức quản lý các giao diện giữa các ứng dụng.
- Notication Manager : Quản lý việc hiển thị các thông báo (như báo có tin nhắn,

có e-mail mới ).
- Resource Manager : Quản lý tài nguyên tĩnh của các ứng dụng bao gồm các file
hình ảnh, âm thanh, layout, string. (Những thành phần không được viết bởi ngôn
ngữ lập trình).
1.4.3 Tầng 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. Điều này được thể hiện thông qua nền tảng
ứng dụng Android. Một số các thư viện cơ bản được liệt kê dưới đây:
- Thư viện hệ thống (System C library): thư viện dựa trên chuẩn C, được sử dụng
chỉ bởi hệ điều hành.
- Thư viện Media (Media Libraries): Có nhiều codec để hỗ trợ việc phát và ghi
các loại định dạng âm thanh, hình ảnh, video thông dụng.
- Thư viện web (LibWebCore) : Đây là thành phần để xem nội dung trên web,
được sử dụng để xây dựng phần mềm duyệt web (Android Browse) cũng như để
Trang 13
các ứng dụng khác có thể nhúng vào. Nó cực kỳ mạnh, hỗ trợ được nhiều công
nghệ mạnh mẽ như HTML5, JavaScript, CSS, DOM, AJAX…
- SGL: thư viện hỗ trợ đồ họa 2D.
- 3D libraries: thư viện đồ họa 3D.
- Free Type : bitmap and vector font rendering.
- Thư viện SQLite : Hệ cơ sở dữ liệu để các ứng dụng có thể sử dụng, nó không
có quan hệ như các cơ sở dữ liệu khác.
1.4.4 Android Runtime
Android bao gồm một tập hợp các thư viện cơ bản mà cung cấp hầu hết các chức
năng có sẵn trong các thư viện lõi của ngôn ngữ lập trình Java. Tất cả các ứng dụng
Android đều chạy trong tiến trình riêng. Máy ảo Dalvik đã được viết để cho một thiết bị
có thể chạy nhiều máy ảo hiệu quả. Các VM Dalvik thực thi các tập tin thực thi Dalvik
(dex). Định dạng được tối ưu hóa cho bộ nhớ tối thiểu. VM là dựa trên register-based,
và chạy các lớp đã được biên dịch bởi một trình biên dịch Java để chuyển đổi thành các
định dạng dex. Các VM Dalvik dựa vào nhân Linux cho các chức năng cơ bản như

luồng và quản lý bộ nhớ thấp.
1.4.5 Tầng hạt nhân Linux (Linux Kernel layer)
Hệ điều hành android được phát trển dựa trên hạt nhân linux, cụ thể là hạt nhân
linux phiên bản 2.6, điều đó được thể hiện ở lớp dưới cùng này. Tất cả mọi hoạt động
của điện thoại muốn thi hành được thì đều được thực hiện ở mức cấp thấp ở lớp này
bao gồm quản lý bộ nhớ (memory management), giao tiếp với phần cứng (driver
model), thực hiện bảo mật (security), quản lý tiến trình (process).
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
Tầng này có các thành phần chủ yếu:
Trang 14
- Display Driver: Điều khiển việc hiển thị lên màn hình cũng như thu nhận những
điều khiển của người dùng lên màn hình (di chuyển, cảm ứng ).
- Camera Driver: Điều kiển hoạt động của camera, nhận luồng dữ liệu từ camera
trả về.
- Bluetooth Driver: Điều khiển thiết bị phát và thu sóng Bluetooth.
- USB driver: Quản lý hoạt động của các cổng giao tiếp USB.
- Keypad driver: Điều khiển bàn phím.
- Wifi Driver: Chịu trách nhiệm về việc thu phát sóng wifi.
- Audio Driver: điều khiển các bộ thu phát âm thanh, giải mã các tính hiệu dạng
audio thành tín hiệu số và ngược lại.
- Binder IPC Driver: Chịu trách nhiệm về việc kết nối và liên lạc với mạng vô
tuyến như CDMA, GSM, 3G, 4G, E để đảm bảo những chức năng truyền thông
được thực hiện.
- M-System Driver: Quản lý việc đọc ghi lên các thiết bị nhớ như thẻ SD, flash.
- Power Madagement: Giám sát việc tiêu thụ điện năng.
1.5 Android Emulator
Android SDK và Plugin Eclipse được gọi là một Android Deverloper Tool (ADT).

Các Android coder sẽ cần phải sử dụng công cụ IDE (Integrated Development
Enveronment) này để phát triển, debugging và testing cho ứng dụng. Tuy nhiên, các lập
trình viên cũng có thể không cần phải sử dụng IDE mà thay vào đó là sử dụng
“command line” để biên dịch và tất nhiên là vẫn có Emulator như thường.
Android Emulator được trang bị đầy đủ hầu hết các tính năng của một thiết bị thật.
Tuy nhiên, một số đã bị giới hạn như là kết nối qua cổng USB, camera và video, nghe
phone, nguồn điện giả lập và bluetooth.
Android Emulator thực hiện các công việc thông qua một bộ xử lý mã nguồn mở,
công nghệ này được gọi là QEMU ( ) được phát triển bởi Fabrice
Bellard.
Trang 15
Hình 1-4 Android Emulator
1.6 Các thành phần trong một Android Project
1.6.1 AndroidManifest.xml
Trong bất kì một project Android nào khi tạo ra đều có 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ư màn hình chính 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
• Application
Thẻ <application>, bên trong thẻ này chứa các thuộc tính được định nghĩa cho
ứng dụng Android như:
Trang 16
- android:icon = “drawable resource”  Ở đây đặt đường dẫn đến file icon
của ứng dụng khi cài đặt. Ví dụ: android:icon = “@drawable/icon”.
- android:name = “string”  thuộc tính này để đặt tên cho ứng dụng Android.
Tên này sẽ được hiển thị lên màn hình sau khi cài đặt ứng dụng.
- android:theme = “drawable theme”  thuộc tính này để đặt theme cho ứng
dụng. Các theme là các cách để hiển thị giao diện ứng dụng…

• 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 manifest của ứng dụng
cần phải khai báo các quyền truy xuất như sau:
• SDK version
Thẻ xác định phiên bản SDK được khai báo như sau:
Ở đây chỉ ra phiên bản SDK nhỏ nhất mà ứng dụng hiện đang sử dụng.
1.6.2 File R.java
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á.
Trang 17
Có thể nói file R.java 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.7 Chu kỳ ứng dụng Android
Một tiến trình Linux gói gọn một ứng dụng Android đã được tạo ra cho ứng dụng
khi codes cần được run và sẽ còn chạy cho đến khi:
- Nó không phụ thuộc.
- Hệ thống cần lấy lại bộ nhớ mà nó chiếm giữ cho các ứng dụng khác.
Một sự khác thường và đặc tính cơ bản của Android là thời gian sống của tiến trình
ứng dụng không được điều khiển trực tiếp bới chính nó. Thay vào đó, nó được xác định
bởi hệ thống qua một kết hợp của:
- Những phần của ứng dụng mà hệ thống biết đang chạy.
- Những phần quan trọng như thế nào đối với người dùng.
Bao nhiêu vùng nhớ chiếm lĩnh trong hệ thống.

1.7.1 Chu kỳ sống thành phần
Các thành phần ứng dụng có một chu kỳ sống, tức là mỗi thành phần từ lúc bắt đầu
khởi tạo và đến thời điểm kết thúc. Giữa đó, đôi lúc chúng có thể là active( trạng thái
hoạt động) hoặc inactive (không hoạt động), hoặc là trong trường hợp Activies nó có
thể visible (ẩn) hoặc invisible (hiển thị).
Chu kỳ sống một ứng dụng Android
Activity/Inactivity
Visiable/Invisible
Start
End
Hình 1-5 Chu kỳ sống thành phần
Trang 18
1.7.2 Activity Stack
Bên trong hệ thống các activity được quản lý như một activity stack. 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 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.
Hình 1-6 Activity stack
Trang 19
1.7.3 Các trạng thái của chu kỳ sống
Hình 1-7 Chu kỳ sống của Activity
Một Activity chủ yếu có 3 chu kỳ chính sau:
- Active hoặc running: Khi Activity là được chạy trên màn hình. Activity này tập
trung vào những thao tác của người dùng trên ứng dụng.
- Paused: Activity là được tạm dừng (paused) khi mất focus nhưng người dùng
vẫn trông thấy. Có nghĩa là một Activity mới ở trên nó nhưng không bao phủ
đầy màn hình. Một Activity tạm dừng là còn sống nhưng có thể bị kết thúc bởi
hệ thống trong trường hợp thiếu vùng nhớ.
- Stopped: Nếu nó hoàn toàn bao phủ bởi Activity khác. Nó vẫn còn trạng thái và

thông tin thành viên trong nó. Người dùng không thấy nó và thường bị loại bỏ
trong trường hợp hệ thống cần vùng nhớ cho tác vụ khác.
1.7.4 Chu kỳ sống của ứng dụng
Trong một ứng dụng Android có chứa nhiều thành phần và mỗi thành phần đều có
một chu trình sống riêng. Và ứng dụng chỉ được gọi là kết thúc khi tất cả các thành
Trang 20
phần trong ứng dụng kết thúc. Activity là một thành phần cho phép người dùng giao
tiếp với ứng dụng. Tuy nhiên, khi tất cả các Activity kết thúc và người dùng không còn
giao tiếp được với ứng dụng nữa nhưng không có nghĩa là ứng dụng đã kết thúc. Bởi vì
ngoài Activity là thành phần có khả năng tương tác người dùng thì còn có các thành
phần không có khả năng tương tác với người dùng như là Service, Broadcast receiver.
Có nghĩa là những thành phần không tương tác người dùng có thể chạy background
dưới sự giám sát của hệ điều hành cho đến khi người dùng tự tắt chúng.
1.7.5 Các sự kiện trong chu kỳ sống của ứng dụng
Nếu một Activity được tạm dừng hoặc dừng hẳn, hệ thống có thể bỏ thông tin khác
của nó từ vùng nhớ bởi việc finish() (gọi hàm finish() của nó), hoặc đơn giản giết tiến
trình của nó. Khi nó được hiển thị lần nữa với người dùng, nó phải được hoàn toàn
restart và phục hồi lại trạng thái trước. Khi một Activity chuyển qua chuyển lại giữa các
trạng thái, nó phải báo việc chuyển của nó bằng việc gọi hàm transition.
Hình 1-8 Các sự kiện trong chu kỳ sống của ứng dụng Android
Tất cả các phương thức là những móc nối mà bạn có thể override để làm tương
thich công việc trong ứng dụng khi thay đổi trạng thái. Tất cả các Activity bắt buộc
phải có onCreate() để khởi tạo ứng dụng. Nhiều Activity sẽ cũng hiện thực onPause()
để xác nhận việc thay đổi dữ liệu và mặt khác chuẩn bị dừng hoạt động với người dùng.
1.7.6 Thời gian sống của ứng dụng
Bảy phương thức chuyển tiếp định nghĩa trong chu kỳ sống của một Activity. Thời
gian sống của một Activity diễn ra giữa lần đầu tiên gọi onCreate() đến trạng thái cuối
cùng gọi onDestroy(). Một Activity khởi tạo toàn bộ trạng thái toàn cục trong
onCreate(), và giải phóng các tài nguyên đang tồn tại trong onDestroy().
Trang 21

1.7.7 Thời gian hiển thị của Activity
Thời gian hiển thị của một activity diễn ra giữa lần gọi một onStart() cho đến khi
gọi onStop(). Trong suốt khoảng thời gian này người dùng có thể thấy activity trên màn
hình và có thể tương tác với ứng dụng.
1.7.8 Các phương thức của chu kỳ sống
Phương thức: onCreate()
- Được gọi khi activity lần đầu tiên được tạo.
- Ở đây bạn làm tất cả các cài đặt tĩnh - tạo các view, kết nối dữ liệu đến list…
- Phương thức này gửi qua một đối tượng Bundle chứa đựng từ trạng thái trược
của Activity.
- Luôn theo sau bởi onStart().
Phương thức: onRestart()
- Được gọi sau khi activity đã được dừng, chỉ một khoảng đang khởi động lần nữa
(stared again).
- Luôn theo sau bởi onStart().
Phương thức: onStart()
- Được gọi trước khi một activity visible với người dùng.
- Theo sau bởi onResume() nếu activity đến trạng thái foreground hoặc onStop()
nế nó trở nên ẩn.
Phương thức: onResume()
- Được gọi trước khi activity bắt đầu tương tác với người dùng.
- Tại thời điểm này activity ở trên đỉnh của stack activity.
- Luôn theo sau bởi onPause().
Phương thức: onPause()
- Được gọi khi hệ thống đang resuming activity khác.
- Phương thức này là điển hình việc giữ lại không đổi dữ liệu.
Trang 22
- Nó nên được diễn ra một cách nhanh chóng bởi vì activity kế tiếp sẽ không được
resumed ngay cho đến khi nó trở lại.
- Theo sau bởi onResume nếu activity trở về từ ở trước, hoặc bởi onStop nếu nó

trở nên visible với người dùng.
- Trạng thái của activity có thể bị giết bởi hệ thống.
Phương thức: onStop()
- Được gọi khi activity không thuộc tầm nhìn của người dùng.
- Nó có thể diễn ra bởi vì nó đang bị hủy, hoặc bởi vì activity khác vữa được
resumed và bao phủ nó.
- Được theo sau bởi onRestart() nếu activity đang đở lại để tương tác với người
dùng, hoặc onDestroy() nếu activity đang bỏ.
- Trạng thái của activity có thể bị giết bởi hệ thống.
Phương thức: onDestroy()
- Được gọi trước khi activity bị hủy.
- Đó là lần gọi cuối cùng mà activity này được nhận.
- Nó được gọi khác bởi vì activity đang hoàn thành, hoặc bởi vì hệ thống tạm thởi
bị hủy diệt để tiết kiệm vùng nhớ.
- Bạn có thể phân biệt giữa 2 kịch bản với phương isFinshing().
1.8 Các thành phần trong ứng dụng Android
1.8.1 View(xem)
Trong một ứng dụng Android, giao diện người dùng được xây dựng từ các đối
tượng View và ViewGroup. Có nhiều kiểu View và ViewGroup. Mỗi một kiểu là một
hậu duệ của class View và tất cả các kiểu đó được gọi là các Widget.
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ề,…đượ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ó
Trang 23
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-9 Cấu trúc một giao diện ứng dụng Android
1.8.2 View Group(xem nhóm)

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:
1.8.3 Linear Layout (bố trí giao diện)
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.
Trang 24
Hình 1-10 Bố trí các widget sử dụng LinearLayout
1.8.4 Frame Layout (khung)
Learn-Android.com
ImageView
TextView
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.
Hình 1-11 Bố trí các widget trong FrameLayout
1.8.5 Absolute Layout(tọa độ của giao diện)
Layout này được sử dụng để bố trí các widget vào một vị trí bất kì trong layout
dựa vào 2 thuộc tính toạ độ x, y. Tuy nhiên, kiểu layout này rất ít khi được dùng bởi vì
toạ độ của các đối tượng luôn cố định và sẽ không tự điều chỉnh được tỷ lệ khoảng cách
giữa các đối tượng. Khi chuyển ứng dụng sang một màn hình có kích thước với màn
hình thiết kế ban đầu thì vị trí của các đối tượng sẽ không còn được chính xác như ban
đầu.
1.8.6 Retalive Layout
Layout này cho phép bố trí các widget theo một trục đối xứng ngang hoặc dọc.
Để đặt được đúng vị trí thì các widget cần được xác định một mối ràng buộc nào đó với

Trang 25

×