Tải bản đầy đủ (.pdf) (60 trang)

Xây dựng ứng dụng streaming video từ server

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 (2.12 MB, 60 trang )

LỜI CAM ĐOAN
Tôi xin cam đoan số liệu và kết quả nghiên cứu trong đồ án này là trung thực
và chưa hề sử dụng để bảo vệ một học vị nào. Mọi sự tham khảo cho việc
thực hiện đồ án, và các thông tin trích dẫn trong đồ án đã được ghi rõ trong
mục tài liệu tham khảo. Đồ án tốt nghiệp là thành quả từ sự nghiên cứu hoàn
toàn thực tế trên cơ sở các số liệu thực tế và được thực hiện sao sự hướng dẫn
của giáo viên hướng dẫn.
Sinh viên thực hiện
Triệu Thành Duy

1


LỜI CẢM ƠN
Trong những năm gần đây với sự phát triển vượt trội của khoa học kỹ thuật
đặc biệt là công nghệ thông tin, với những ứng dụng của công nghệ thông tin vào
các lĩnh vực đã góp phần to lớn cho sự nghiệp phát triển của con người. Một trong
các lĩnh vực đó là áp dụng các máy thiết bị công nghệ vào giải quyết các bài toán
thực tế.
Vì vậy công nghệ thông tin nói chung và các thiết bị công nghệ nói riêng đã
đóng góp rất nhiều lợi ích để nâng cao đời sống cho con người. Trong đợt đồ án tốt
nghiệp em đã chọn đề tài “Xây dựng ứng dụng Streaming video từ Server”. Chương
trình sử dụng ngôn ngữ lập trình hướng đối tượng Java để cài đặt.
Trong quá trình thực hiện đồ án tốt nghiệp em xin cám ơn cô giáo Nguyễn Lan
Oanh đã định hướng và hướng dẫn cho em và hoàn thành đồ án tốt nghiệp. Em xin
gửi tới cô những lời cảm ơn chân thành nhất.
Mặc dù đã cố gắng trong quá trình nghiên cứu làm đề tài nhưng do còn nhiều
hạn chế về thời gian và trình độ nên đồ án của em không tránh khỏi nhiều thiếu sót,
và nhiều vấn đề chưa được giải quyết hoàn chỉnh. Vì vậy, em rất mong nhận được
những ý kiến đóng góp của các thầy cô và các bạn để có thể hoàn thiện và phát triển
đề tài hơn. Em xin chân thành cảm ơn!



2


LỜI NÓI ĐẦU
Tổng quan về vấn đề nghiên cứu:
-

Đơn vị thực hiện tại: Trường Đại học Công nghệ thông tin và Truyền thông.

-

Bối cảnh chung của vấn đề nghiên cứu: Xây dựng ứng dụng cho hệ điều
hành Android.

-

Mô tả vấn đề nghiên cứu: Xây dựng ứng dụng Streaming video cho Android,
ứng dụng đáp ứng các yêu cầu nhỏ gọn, dễ sử dụng, giao diện đơn giản, thân
thiện. Có thể tải về và nghe audio của video.

Lý do chọn đề tài:
-

Lý do chọn đề tài: Xây dựng được ứng dụng phát các video (Streaming
Video) mà không phải tải về. Xây dựng ứng dụng giúp việc tìm kiếm, lưu trữ
các nội dung video được đơn giản hơn, và một số tính năng hữu ích khác.

-


Tên đề tài: Xây dựng ứng dụng Streaming Video từ Server

Mục tiêu nghiên cứu:
-

Nghiên cứu lý thuyết lập trình Java.

-

Nghiên cứu lý thuyết hệ điều hành Android.

-

Xây dựng ứng dụng Streaming Video từ Server trên Android

3


MỤC LỤC
LỜI CẢM ƠN ..............................................................................................................1
LỜI NÓI ĐẦU .............................................................................................................3
Tổng quan về vấn đề nghiên cứu: ..............................................................................3
Lý do chọn đề tài:......................................................................................................3
Mục tiêu nghiên cứu:.................................................................................................3
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT .............................................................................7
1.1.

Giới thiệu Streaming Video .............................................................................7

1.1.1.


Streaming là gì? ........................................................................................7

1.1.2.

Live Streaming là gì? ................................................................................7

1.1.3.

Streaming Video mang ý nghĩa gì? ...........................................................7

1.1.4.

Streaming Video mang tác dụng gì?..........................................................7

1.1.5.

Streaming Video hoạt động như thế nào?..................................................7

1.1.6.

Streaming với băng thông lưu trữ..............................................................8

1.2.

Giới thiệu về Jsoup Library .............................................................................9

1.3.

Tổng quan về hệ điều hành Android ..............................................................11


1.3.1.

Khái niệm ...............................................................................................11

1.3.2.

Lịch sử phát triển ....................................................................................11

1.3.3.

Đặc điểm ................................................................................................13

1.4.

Kiến trúc và các thành phần của Android ......................................................16

1.4.1.

Kiến trúc của nền tảng Android ..............................................................16

1.4.2.

Các thành phần của Android ...................................................................20

1.4.3.

Hoạt động (Activity)...............................................................................20

1.4.4.


Service....................................................................................................23

1.4.5.

Bộ nhận quảng bá (Broadcast receivers) .................................................24

1.4.6.

Content Provider.....................................................................................25

1.4.7.

Các thành phần kích hoạt (các Intent) .....................................................26

1.4.8.

View .......................................................................................................28

1.4.9.

Tập tin khai báo (manifest) .....................................................................28

1.5.

Công cụ hỗ trợ lập trình Android...................................................................29

1.5.1.

Tổng quan...............................................................................................29

4


1.5.2.

Tạo máy ảo trên android .........................................................................30

CHƯƠNG 2: KHẢO SÁT, PHÂN TÍCH THIẾT KẾ HỆ THỐNG ............................32
2.1.

Khảo sát nhu cầu ...........................................................................................32

2.1.1. Thống kê về số lượng người sử dụng Smartphone ......................................32
2.1.2. Nhu cầu sử dụng Smartphone theo các lĩnh vực .........................................33
2.2.

Phân tích các yêu cầu của chương trình .........................................................33

2.2.1.

Đặt vấn đề:..............................................................................................33

2.2.2.

Mô tả chức năng chính:...........................................................................35

2.2.3.

Các yêu cầu đối với bài toán ...................................................................35


2.2.4.

Các yêu cầu chung của ứng dụng ............................................................35

2.3.

Xác định các tác nhân của chương trình ........................................................35

2.4.

Xác định các Use Case chính của chương trình .............................................36

2.5.

Đặc tả chi tiết các UC chính ..........................................................................37

2.5.1.

UC khởi tạo ứng dụng.............................................................................37

2.5.2.

UC xem video.........................................................................................39

2.5.3.

Use Case nghe audio...............................................................................41

2.5.4.


Use Case tìm kiếm video ........................................................................43

2.5.5.

UC gửi thông tin phản hồi.......................................................................45

2.6.

Biểu đồ Packages và Classes .........................................................................46

CHƯƠNG 3: XÂY DỰNG VÀ CÀI ĐẶT CHƯƠNG TRÌNH...................................47
3.1.

Yêu cầu xây dựng phần mềm ........................................................................47

3.2.

Xây dựng chương trình..................................................................................47

3.3.

Một số giao diện chính của chương trình .......................................................48

3.3.1.

Giao diện màn hình xem Video offline ...................................................48

3.3.2.

Giao diện màn hình khi chuyển sang chết độ Online...............................50


3.3.3.

Giao diện màn hình tìm kiếm chính ........................................................51

3.3.4.

Giao diện màn hình danh sách videos theo từ khóa .................................52

3.3.5.

Giao diện màn hình thông tin chi tiết video.............................................54

3.3.6.

Giao diện màn hình phát video................................................................55

3.3.7.

Giao diện màn hình phát Audio của video...............................................56

3.3.8.

Giao diện màn hình tải video ..................................................................57
5


KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN...................................................................58
Kết luận ..................................................................................................................58
Hướng phát triển .....................................................................................................58

DANH MỤC TÀI LIỆU THAM KHẢO ....................................................................59
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN.........................................................60

6


CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1.

Giới thiệu Streaming Video

1.1.1. Streaming là gì?
Streaming hay streaming media là một quá trình mà các định dạng truyền thông
(như âm thanh, hình ảnh) được gửi tới người dùng và hiển thị ngay cả khi nó vẫn
đang trong quá trình tải.
1.1.2. Live Streaming là gì?
Đây là một thuật ngữ nói về việc các nội dung, các dữ liệu media được thu lại,
xử lý rồi truyền tải trực tiếp qua mạng Internet tới người nhận trong cùng một thời
điểm. Dễ hình dung nhất, có thể tưởng tượng tới những trận bóng đá mà chúng ta
thường xuyên xem trực tiếp trên Youtube. Đó chính là live stream.
Vì là một kỹ thuật được thực hiện theo thời gian thực, nên tùy vào từng trường
hợp, từng hệ thống server mà khi nhận được dữ liệu, video chạy trên thiết bị của
người dùng sẽ có độ trễ nhất định so với các tình huống thực tế đang xảy ra.
1.1.3. Streaming Video mang ý nghĩa gì?
Theo định nghĩa một cách chính xác nhất, video streaming chính là một "dòng
chảy" video. Các thông tin, dữ liệu của đoạn video này được luân chuyển liên tục,
đều đặn từ “nguồn” gửi tới “đích” nào đó thông qua mạng Internet.
1.1.4. Streaming Video mang tác dụng gì?
Công nghệ streaming đang trở nên ngày càng quan trọng với sự phát triển của
Internet, bởi đa số người dùng đều không có đủ quyền hạn để tải nhanh và ngay lập

tức các tập tin media có dung lượng lớn. Việc vừa tải vừa xem cũng giúp cho người
dùng tiết kiệm được rất nhiều thời gian so với trước đây (phải tải về toàn bộ mới có
thể xem được).
Điểm nổi bật và rõ ràng nhất của Streaming Video chính là việc người dùng có
thể xem các đoạn video clip, thậm chí là phim mà không cần phải download về
máy.
1.1.5. Streaming Video hoạt động như thế nào?
Thực chất, Streaming Video chính là việc chia nhỏ các file media thành từng
frame, sau đó gửi những frame này vào bộ nhớ đệm của máy tính và hiển thị nội

7


dung của lần lượt từng fame. Trong khi người dùng đang sử dụng dữ liệu của những
tập tin ấy thì frame của những tập tin khác vẫn tiếp tục được tải về.

Hình 1.0. Miêu tả hoạt động của Streaming Video.
Ngày nay, không chỉ có video, mà ngay cả các tập tin âm thanh, trò chơi điện tử
cũng được streaming. Có thể nói, Streaming đang trở thành xu hướng phát triển mới
của nghành giải trí truyền thông trên mạng Internet.
1.1.6. Streaming với băng thông lưu trữ
Băng thông rộng tốc độ từ 2,5 Mbit /s trở lên được khuyến khích cho việc
streaming phim điện ảnh, ví dụ như AppleTV, GoogleTV hoặc SonyTV Blu-ray
Disc Player, vào khoảng 10 Mbit/s cho các nội dung độ nét cao HD.Kết nối Unicast
đòi hỏi nhiều kết nối từ cùng streaming server, ngay cả khi truyền cùng một nội
dung.
Kích thước lưu trữ Streaming media được tính bằng băng thông để Streaming
và chiều dài của các tập tin Media, bằng cách sử dụng công thức sau đây (cho một
người dùng duy nhất và tập tin):
Kích thước lưu trữ (MB) = chiều dài (tính bằng giây) × tỷ lệ bit (bit / s) / (8 ×

1024 × 1024)
Ví dụ thực tế:
Một giờ video được mã hóa ở 300 kbit /s (đây là băng thông video điển hình
năm 2005 và nó thường được mã hóa 320 x 240 điểm ảnh) sẽ là:
(3.600 s × 300.000 bit / s) / (8 × 1024 × 1024) yêu cầu dung lượng lưu trữ
khoảng 128 MB.

8


Nếu tập tin được lưu trữ trên một máy chủ cho việc streaming theo yêu cầu và
được xem bởi 1.000 người cùng một lúc bằng cách sử dụng một giao thức Unicast,
yêu cầu là:
300 kbit/s × 1000 = 300.000 kbit/s = 300 Mbit/s của băng thông.
Điều này tương đương với khoảng 135 GB cho mỗi giờ. Sử dụng giao thức
Multicast server sẽ gửi ra chỉ một luồng đơn(thông thường) cho tất cả người dùng.
Do đó, việc Stream như vậy sẽ chỉ sử dụng 300 kbit/s băng thông.
Việc tính toán để live streaming là tương tự.
Giả định: tốc độ mã hóa là 500 kbit/s.
Nếu chương trình kéo dài 3 giờ với 3.000 người xem, sau đó tính toán là:
Số MBs chuyển = tốc độ mã hóa(bit/s) x số giây x số lượng người xem / (8 *
1024 * 1024)
Số MBs chuyển = 500 x 1024 (bit/s) × 3 × 3600 (= 3 giờ) × 3.000 (nbr người
xem) / (8 * 1024 * 1024) = 1.977.539 MB.
Âm thanh stream được nén bằng cách sử dụng định dạng âm thanh như MP3,
Vorbis hoặc AAC.Hình ảnh video stream được nén bằng cách sử dụng codec video
như H.264 hoặc VP8. Mã hóa âm thanh và video stream được nhúng trong một gói
bitstream như FLV, WebM, ASF hoặc ISMA. Bitstream được phân phối từ một
streaming server tới một streaming client bằng cách sử dụng một giao thức truyền
tải, ví dụ như là MMS hoặc RTP.Các streaming client có thể tương tác với

streaming server bằng cách sử dụng một giao thức kiểm soát, chẳng hạn như MMS
hoặc RTSP.

1.2.

Giới thiệu về Jsoup Library
Jsoup là một thư viện của java để giúp chúng ta trích xuất và thao tác HMTL

file. Sử dụng thư viện này chúng ta có thể phân tích trang HTML vào trong
Android.Có một vài tình huống khi chúng ta muôn phân tích và trích xuất một vài
thông tin từ trang HTML thay vì thể hiện toàn bộ nó. Trong trường hợp này chúng
ta có thể sử dụng Jsoup, với các API mạnh mẽ rất dễ dàng cho việc sử dụng và tích
hợp vào trong project Android. Trong bài viết này chúng tôi sẽ thảo luận làm thế
nào setup và sử dụng Jsoup , làm sao để trích xuất một vài thông tin.
Giới thiệu Jsoup:
9


Như đã nói Jsoup là một thư viện của Java để cung câp một bộ các API cho
việc trích xuất và thao tác các file HTML . Có một vài phương thức cho việc đọc và
phân tích một trang HTML , trong trường hợp của chúng ta, chúng ta muốn lấy một
vài thông tin từ một trang HTML trên server ở xa và chúng ta phải cung cấp một
URL. Nếu chúng ta muốn phân tích trang như là DOM, chúng ta có:
Document doc = Jsoup.connect(URL).get();
doc là một biến thuộc class Document để lưu trữ những tài liệu đã được lấy về.
Bây giờ chúng ta đã có Document và chúng ta có thể tự do trích xuất thông tin.
Chúng ta có thể lấy title và những thông tin khác đang được sử dụng trong các Tag
HTML Cho ví dụ, nếu chúng ta muốn lấy tất cả các tag có tên là meta :
Elements metaElems = doc.select("meta");
Phương thức select được sử dụng khi chúng ta muốn lấy về những tag đang sử

dụng truy vấn CSS . Cho ví dụ, nếu chúng ta muốn lấy giá trị thuộc tính từ một tag :
String name = metaElem.attr("name");
“name” ở đây là tên thuộc tính. Hơn nữa, Chúng ta có thể lựa chọn tất cả các
thành phần trong một trang HTML có một giá trị CSS xác định. Cho ví dụ, trong
website có một vài thành phần có một class CSS tên là “topic" , vậy chúng tao có.
Elements topicList = doc.select("h2.topic");
Thiết lập project và tích hợp Jsoup:
Đầu tiên chúng ta cần làm là tạo một project Android có chứa một Activity đơn
giản. Tôi sẽ giả sử rằng bạn đang sử dụng Android Studio trong phát triển ứng dụng
Android. Khi bạn đã tạo một project android, bạn phải add Jsoup như là một
dependency libary. Vậy mở file build.gradle và add thêm một dependency libary
như bên dưới.
compile 'org.jsoup:jsoup:1.7.3'
Vậy chúng ta có :
Default
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:19.+'
compile 'org.jsoup:jsoup:1.7.3'
}
10


1.3.

Tổng quan về hệ điều hành Android

1.3.1. Khái niệm
Android là một hệ thống điều hành, middleware và các ứng dụng di động chủ
chốt, cung cấp một bộ đầy đủ các phần mềm cho các thiết bị di động.

Android được phát triển bởi tập đoàn Google, phiên bản đầu tiên ra đời năm
2008. Được xây dựng trên một nền tảng mở, và một bộ thư viện đa năng, mạnh mẽ
với nguyên lý mở, Android đã nhanh chóng được cộng đồng lập trình viên di động
hưởng ứng mạnh mẽ. Nền tảng được tích hợp nhiều tính năng nổi bật:
 Android là một hệ điều hành nhân Linux, đảm bảo sự tương tác với các
phần cứng, quản lý bộ nhớ, điều khiển các tiến trình tối ưu cho các thiết bị
di động.
 Bộ ứng dụng khung cho phép sử dụng lại và thay thế các thành phần riêng
lẻ.
 Máy ảo Dalvik được tối ưu cho các thiết bị di động, chạy các ứng dụng lập
trình trên ngôn ngữ Java.
 Các thư viện cho phát triển ứng dụng mã nguồn mở bao gồm SQLite,
WebKit, OpenGL và trình quản lý đa phương tiện.
 Hỗ trợ các chuẩn đa phương tiện phổ biến, thoại trên nền GSM, Bluetooth
EDGE, 3G và Wifi
 Hỗ trợ Camera, GPS, la bàn, máy đo gia tốc…
 Bộ phát triển ứng dụng SDK đầy đủ gồm thiết bị giả lập, công cụ sửa lỗi,
tích hợp với Eclipse SDK.
1.3.2. Lịch sử phát triển
Tổng công ty Android (Android, Inc.) được thành lập tại Palo Alto,
California vào tháng 10 năm 2003 bởi Andy Rubin (đồng sáng lập công ty
Danger), Rich Miner, Nick Sears và Chris White. Theo lời của Rubin, "các thiết bị
di động thông minh hơn có thể biết được vị trí và sở thích của người dùng".Dù
những người thành lập và nhân viên đều là những người có tiếng tăm, Tổng công ty
Android hoạt động một cách âm thầm, chỉ tiết lộ rằng họ đang làm phần mềm dành
cho điện thoại di động. Trong năm đó, Rubin hết kinh phí. Steve Perlman, một

11



người bạn thân của Rubin, mang cho ông 10.000 USD tiền mặt nhưng từ chối tham
gia vào công ty.
Google mua lại Tổng công ty Android vào ngày 17 tháng 8 năm 2005, biến nó
thành một bộ phận trực thuộc Google. Những nhân viên của chủ chốt của Tổng
công ty Android, gồm Rubin, Miner và White, vẫn tiếp tục ở lại công ty làm việc
sau thương vụ này. Vào thời điểm đó không có nhiều thông tin về Tổng công ty,
nhưng nhiều người đồn đoán rằng Google dự tính tham gia thị trường điện thoại di
động sau bước đi này. Tại Google, nhóm do Rubin đứng đầu đã phát triển một nền
tảng thiết bị di động phát triển trên nền nhân Linux. Google quảng bá nền tảng này
cho các nhà sản xuất điện thoại và các nhà mạng với lời hứa sẽ cung cấp một hệ
thống uyển chuyển và có khả năng nâng cấp. Google đã liên hệ với hàng loạt hãng
phần cứng cũng như đối tác phần mềm, bắn tin cho các nhà mạng rằng họ sẵn sàng
hợp tác với các cấp độ khác nhau.
Ngày 5 tháng 11 năm 2007, Liên minh thiết bị cầm tay mở (Open Handset
Alliance), một hiệp hội bao gồm nhiều công ty trong đó có Texas Instruments, Tập
đoàn Broadcom, Google, HTC, Intel, LG, Tập đoàn Marvell Technology,
Từ năm 2008, Android đã trải qua nhiều lần cập nhật để dần dần cải tiến hệ
điều hành, bổ sung các tính năng mới và sửa các lỗi trong những lần phát hành
trước. Mỗi bản nâng cấp được đặt tên lần lượt theo thứ tự bảng chữ cái, theo tên của
một món ăn tráng miệng; ví dụ như phiên bản 1.5 Cupcake (bánh bông lan nhỏ có
kem) tiếp nối bằng phiên bản 1.6 Donut (bánh vòng). Phiên bản mới nhất hiện nay
là 4.4.2 Kitkat. Vào năm 2010, Google ra mắt loạt thiết bị Nexus—một dòng sản
phẩm bao gồm điện thoại thông minh và máy tính bảng chạy hệ điều hành Android,
do các đối tác phần cứng sản xuất. HTC đã hợp tác với Google trong chiếc điện
thoại thông minh Nexus đầu tiên, Nexus One. Kể từ đó nhiều thiết bị mới hơn đã gia
nhập vào dòng sản phẩm này, như điện thoại Nexus 4 và máy tính bảng Nexus 10,
lần lượt do LG và Samsung sản xuất. Google xem điện thoại và máy tính bảng
Nexus là những thiết bị Android chủ lực của mình, với những tính năng phần cứng
và phần mềm mới nhất của Android.
Android Marshmallow là tên của một bản phát hành của hệ điều hành điện

thoại di động Android M(được gọi là Marshmallow). Giới thiệu tại Google I/O vào
12


ngày 28 tháng 05 năm 2015, Android Marshmallow sẽ tập trung chủ yếu đến các cải
tiến và tính năng bổ sung khác. Android Marshmallow có phiên bản đầu tiên là 6.0.
Android M giới thiệu một mô hình cho phép thiết kế lại: hiện nay chỉ có tám
loại phép, và các ứng dụng không còn tự động cấp tất cả các điều khoản được quy
định tại thời điểm cài đặt. Một hệ thống opt-in hiện đang được sử dụng, trong đó
người dùng sẽ được nhắc để chấp nhận hoặc từ chối quyền cá nhân đến một ứng
dụng khi cần thiết, chẳng hạn như truy cập vào camera hay microphone. Ứng dụng
ghi nhớ tài trợ cho phép của họ, và họ có thể được điều chỉnh bởi người sử dụng bất
cứ lúc nào. Chỉ có các ứng dụng biên dịch cho Android M của mình bằng cách sử
dụng SDK sẽ sử dụng khuôn khổ cho phép mới, trong khi tất cả các ứng dụng khác
sẽ tiếp tục sử dụng các mô hình cấp phép trước đó. Android "M" có hỗ trợ nhận
dạng vân tay, cho phép sử dụng dấu vân tay để mở khóa thiết bị và chứng thực Play
Store và Android Pay mua hàng; một tiêu chuẩn API cũng có sẵn để thực hiện xác
thực dấu vân tay dựa trên các ứng dụng khác. Một chương trình quản lý điện năng
mới được gọi là "ngủ gật" làm giảm hoạt động nền của thiết bị khi hệ điều hành
phát hiện rằng thiết bị này không thể chất xử lý. Android "M" hỗ trợ USB type-C,
bao gồm khả năng để hướng dẫn thiết bị để sạc thiết bị khác qua USB. Android "M"
cũng giới thiệu "liên kết xác nhận" có thể được cấu hình để mở trực tiếp trong ứng
dụng cụ thể của họ mà không cần nhắc nhở người dùng hơn nữa.
1.3.3. Đặc điểm
 Tính mở
Android được xây dựng từ dưới đi lên cho phép người phát triển tạo các ứng
dụng di động hấp dẫn với đầy đủ các điểm mạnh của các thiết bị cầm tay hiện có.
Android hoàn toàn mở, một ứng dụng có thể gọi tới bất kể một chức năng lõi của
điện thoại như tạo cuộc gọi, gửi tin nhắn hay sử dụng máy ảnh, cho phép người
phát triển tạo phong phú hơn, liên kết hơn các tính năng cho người dùng. Android

được xây dựng trên nhân Linux mở. Thêm nữa, nó sử dụng một máy ảo mà đã
được tối ưu hóa bộ nhớ và phần cứng với môi trường di động. Android là một mã
nguồn mở, nó có thể được mở rộng để kết hợp tự do giữa các công nghệ nổi trội.
Nền tảng này sẽ tiếp tục phát triển bởi cộng đồng phát triển để tạo ra các ứng dụng
di động hoàn hảo.
13


 Tính ngang hàng của các ứng dụng
Với Android, không có sự khác nhau giữa các ứng dụng điện thoại cơ bản với
ứng dụng của bên thứ ba. Chúng được xây dựng để truy cập như nhau tới một loạt
các ứng dụng và dịch vụ của điện thoại. Với các thiết bị được xây dựng trên nền
tảng Android, người dùng có thể đáp ứng đầy đủ các nhu cầu mà họ thích. Chúng ta
có thể đổi màn hình nền, kiểu gọi điện thoại, hay bất kể ứng dụng nào. Chúng ta
thậm chí có thể hướng dẫn điện thoại chỉ xem những ảnh mình thích.
 Phá vỡ rào cản phát triển ứng dụng
Android phá vỡ rào cản để tạo ứng dụng mới và cải tiến. Một người phát triển
có thể kết hợp thông tin từ trang web với dữ liệu trên điện thoại cá nhân – chẳng
hạn như danh bạ, lịch hay vị trí trên bản đồ – để cung cấp chính xác hơn cho người
khác. Với Android, người phát triển có thể xây dựng một ứng dụng mà cho phép
người dùng xem vị trí của những người bạn và thông báo khi họ đang ở vị trí lân
cận. Tất cả được lập trình dễ dàng thông qua sự hỗ trợ của MapView và dịch vụ
định vị toàn cầu GPS.
 Dễ dàng và nhanh chóng xây dựng ứng dụng
Android cung cấp bộ thư viện giao diện lập trình ứng dụng đồ sộ và các công
cụ để viết các ứng dụng phức tạp. Ví dụ, Android có thể cho phép người phát triển
biết được vị trí của thiết bị và cho phép các thiết bị giao tiếp với nhau để có thể tạo
nên mạng xã hội chia sẻ ngang hàng rộng khắp. Thêm nữa, Android còn bao gồm
một bộ công cụ đầy đủ giúp cho việc phát triển trở nên dễ dàng.


14


Ưu và nhược điểm của Android so với các hệ điều hành khác:
Ưu điểm
Nhược điểm
Android Google Android là nền tảng mở, cho Có hỗ trợ cảm ứng đa điểm,
phép người dùng có thể tùy biến nền nhưng chức năng này bị tắt
tảng theo ý thích, hơn nữa lại có một (do sợ vi phạm bản quyền
Liên minh thiết bị cầm tay mở hậu với iPhone), giao diện không
thuẫn, Google Android đang là đối thủ bắt mắt, khả năng hỗ trợ bộ
xứng tầm của iPhone của Apple. nhớ kém iPhone, không đồng
Google đang tích cực mở rộng cộng bộ được với máy tính. Hi
đồng phát triển các ứng dụng cho vọng trong thời gian tới
Android. Bộ công cụ phát triển phần Google sẽ sớm khắc phục
mềm (SDK) đầy đủ, hỗ trợ đa nền những nhược điểm này.
(Linux, Windows hay Mac OS) do chạy
trên máy ảo Java. Thư viện ngày càng
hoàn thiện, dễ dàng cho người lập trình.
Window Có thư viện API khá giống với API trên Sự có mặt của iPhone và
s Mobile Win32, các công cụ hỗ trợ lập trình đầy Android là hai trở ngại lớn
đủ với Visual Studio, điều này làm cho với Windows Mobile. Hai
những người phát triển trên Win32 nền tảng này đang hoàn thiện
không mất công tìm hiểu lại các API và và được người dùng rất ưa
các công cụ lập trình.
chuộng.
iPhone
Màn hình cảm ứng đa điểm: iPhone Không gửi được tin nhắn đa
sử dụng hoàn toàn bằng cảm ứng và phương tiện (MMS) và IM
không sử dụng các nút. Với iPhone ta (Instant Messaging), thiếu bộ

có thể điều khiển trên màn hình kể cả nhớ mở rộng. Việc lập trình
việc trượt của các ngón tay. Ta có thể trên cho iPhone phải thực
phóng to ảnh bằng cách trượt hai ngón hiện trên hệ điều hành Mac,
tay ra xa và thu nhỏ bằng cách ngược do đó không phải ai cũng có
lại.
thể lập trình cho iPhone. Hơn
Bộ cảm nhận gia tốc: Những phản ứng thế, nếu muốn đưa chương
nhanh chóng của bộ cảm nhận gia tốc trình ra máy thật người lập
thay đổi độ phân giải màn hình từ dọc trình phải trả một khoản phí
sang ngang tự động khi ta đặt điện thoại lập trình, điều này làm giảm
nằm ngang. Điều này làm sinh động tính cạnh tranh so với các đối
thêm cho các trò chơi. Âm thanh, hình thủ khác.
ảnh hoàn hảo.
Bảng 1.1 : So sánh các hệ điều hành
15


1.4.

Kiến trúc và các thành phần của Android

1.4.1. Kiến trúc của nền tảng Android
Kiến trúc tổng quát
Android bao gồm bốn thành phần sau:
 Hệ điều hành.
 Thư viện và các giao diện lập trình ứng dụng.
 Khung ứng dụng.
 Ứng dụng.
Hệ điều hành


Hình 1.1 : Nhân Linux trên Android
Android sử dụng nhân Linux 2.6 làm nhân cho các dịch vụ hệ thống như bảo mật,
quản lý bộ nhớ, quản lý tiến trình (xử lý tiến trình, đa luồng), ngăn xếp mạng và trình
điều khiển thiết bị (giao tiếp USB, giao tiếp hồng ngoại, không đây, v.v…). Nhân Linux
này cũng có vai trò như một lớp trừu tượng giữa phần cứng và phần mềm.
Thư viện và các giao diện lập trình ứng dụng
Android có một thư viện khá phong phú cung cấp sẵn để người lập trình có thể
sử dụng. Hình sau là sơ đồ tóm tắt về hệ thống thư viện này.

16


Hình 1.2 : Thư viện lập trình ứng dụng trên Android
Android runtime
Android có một tập các thư viện nòng cốt để cung cấp hầu hết các chức năng
sẵn có trong thư viện cốt lõi của ngôn ngữ lập trình Java. Android Runtime: Bao
gồm máy ảo Dalvik và các thư viện Android.
Các thư viện cơ bản: Các ứng dụng Android được phát triển trên môi trường
Java, nhưng Dalvik lại không phải là một Java VM. Các thư viện cơ bản của
Android cung cấp hầu hết các chức năng có trong thư viện cơ bản của Java cũng
như là thư viện riêng của Android.
Máy ảo Dalvik: Dalvik là máy ảo để chạy các ứng dụng trên Android, đã được
tối ưu để đảm bảo rằng một thiết bị có thể chạy được nhiều Instance một cách hiệu
quả. Nó dựa vào nhân Linux để thực hiện đa luồng và quản lý bộ nhớ cấp thấp.
Bộ thư viện
Android cung cấp một số các APIs cho phát triển ứng dụng. Danh sách các
API cơ bản sau được cung cấp bởi tất cả các thiết bị trên nền Android:
 android.util: Gói tiện ích cơ bản bao gồm nhiều lớp mức thấp như là các
lớp quản lý (List, Stack…) lớp xử lý chuỗi, lớp xử lý XML.
 android.os: Gói hệ điều hành cung cấp truy cập đến các dịch vụ cơ bản

như là chuyển tin nhắn, thông tin chéo, đồng hồ và gỡ lỗi.
 android.graphics: Cung cấp các lớp đồ họa mức thấp thực hiện các chức
năng đồ họa, màu, vẽ cơ bản.

17


 android.text: Công cụ hiển thị và xử lý văn bản.
 android.database: Cung cấp các lớp mức thấp bắt buộc cho việc điều
khiển cursor khi làm việc với các cơ sở dữ liệu.
 android.content: Các giao tiếp lập trình nội dung được dùng để quản lý
truy cập dữ liệu và xuất bản bằng cách cung cấp các dịch vụ thao tác với
tài nguyên, Content Provider, và các gói.
 android.view: View là lớp giao diện người dùng cơ bản nhất. Tất cả giao
diện người dùng được tạo ra đều phải sử dụng một tập các View để cung
cấp cho các thành phần tương tác người dùng.
 android.widget: Xây dựng dựa trên gói View. Những lớp widget những
thành phần giao diện được tạo sẵn được sử dụng để tạo nên giao diện
người dùng. Các widget bao gồm danh sách, nút bấm, hộp nhập, các kiểu
trình bày (layout).
 com.google.android.maps: Bộ API mức cao cung cấp truy cập đến điều
khiển bản đồ sẵn trong Android từ ứng dụng được xây dựng. Bao gồm cả
lớp MapView cũng như Overlay và MapController để tương tác với bản
đồ bên trong ứng dụng.
 android.app: Một gói thư viện bậc cao, cung cấp truy cập đến dữ liệu của
ứng dụng. Gói ứng dụng cũng bao gồm lớp Activity và Service là thành
phần cơ bản của mọi ứng dụng Android.
 android.provider: Để tạo thuận lợi cho người phát triển truy cập đến các
Content Provider tiêu chuẩn (như là dữ liệu danh bạ), gói cung cấp
(Provider) bao gồm các lớp cho phép truy cập đến cơ sở dữ liệu chuẩn

trong tất cả các bản phân phối Android.
 android.telephony: Các API điện đàm cung cấp khả năng tương tác trực
tiếp với tầng điện thoại trong các thiết bị, cho phép tạo, nhận, theo dõi các
cuộc gọi, tình trạng các cuộc gọi và tin nhắn SMS.
 android.webkit: Gói WebKit cung cấp các API để làm việc với các nội
dung Web-based bao gồm một lơp WebView để tạo ra giao diện web,
nhúng trong ứng dụng và một trình quản lý cookie.
Cùng với các API của Android, còn có một tập các thư viện C/C++ như:
18


 OpenGL: Thư viện dùng để tạo ra các đồ họa 3D dựa vào chuẩn
OpenGLES 1.0 API.
 FreeType: Hỗ trợ xử lý bitmap và font vector.
 GGL: Thư viện cơ bản, dùng để cung cấp các engine đồ họa 2D.
 Libc: Thư viện C chuẩn, được tối ưu cho các thiết bị Linux-based.
 SQLite Engine: Cơ sở dữ liệu quan hệ gọn nhẹ, dùng để lưu trữ dữ liệu
của ứng dụng.
 SSL: Hỗ trợ sử dụng giao thức mã hóa Secure Sockets Layer trong bảo
mật truyền thông Internet.
Ngoài các thư viện chuẩn của Android, để đáp ứng tiêu chí phù hợp với nhiều
thiết bị khác nhau, Android còn có thể có các API phụ thuộc thiết bị như
android.location,

android.media,

android.opengl,

android.hardware,


android.bluetooth, android.net.wifi, và android.telephony.
Khung ứng dụng trên Android

Hình1.3 : Khung ứng dụng trên Android
Kiến trúc của Android khuyến khích khái niệm thành phần sử dụng lại, cho
phép công bố và chia sẻ các Activity, Service, dữ liệu, với các ứng dụng khác với
quyền truy cập được quản lý bởi khai báo.
Cơ chế đó cho phép người lập trình tạo ra một trình quản lý danh bạ hoặc trình
quay số điện thoại mà có các thành phần người khác có thể tạo mới giao diện và mở
rộng chức năng thay vì tạo lại chúng.
Những dịch vụ sau là những dịch vụ kiến trúc cơ bản nhất của tất cả các ứng
dụng, cung cấp một framework cho mọi mọi phần mềm được xây dựng:
 Actitvity Manager: Điều khiển vòng đời của các Activity bao gồm cả quản
lý các tầng Activity.
 Views: Được sử dụng để tạo lập các giao diện người dùng cho các Activity.
19


 Notification Mamager: Cung cấp một cơ chế cố định và quy củ cho việc gửi
các thông báo đến người dùng.
 Content Provider: Cho phép ứng dụng chia sẻ dữ liệu giữa các ứng dụng.
 Resource Manager: Hỗ trợ các thành phần không thuộc mã nguồn như là
chuỗi ký tự, đồ họa được đặt bên ngoài.
Ứng dụng

Hình 1.4: Các ứng dụng trên Android
Đây là lớp trên cùng của kiến trúc nền tảng Android. Android sẽ hoạt động với
một bộ các ứng dụng bao gồm ứng dụng thư điện tử, gửi tin nhắn, lịch, bản đồ, trình
duyệt web, danh bạ v.v… Tất cả các ứng dụng được viết bằng ngôn ngữ Java. Các
ứng dụng này có thể được cung cấp sẵn hoặc được phát triển bởi những lập trình

viên.
1.4.2. Các thành phần của Android
Một ứng dụng trên Android được cấu thành từ bốn thành phần cơ bản sau:
 Activities (hoạt động).
 Services.
 Broadcast Receivers.
 Content Provider.
Các thành phần này không nhất thiết phải có mặt đầy đủ trong ứng dụng.
Chúng ta có thể xem các thành phần nào được sử dụng trong ứng dụng bằng việc
xem khai báo trong file AndroidManifest.xml.
1.4.3. Hoạt động (Activity)
 Khái niệm
Activity là thành phần tối quan trọng của bất kì ứng dụng Android nào.
Activity đảm nhiệm công việc tạo ra một cửa sổ (window) để người lập trình đặt lên
đó một giao diện thông qua phương thức setContentView(View), phương thức này
được gọi trong phương thức @Override onCreate() của class được extends từ
20


Activity. Activity nó có thể tạo ra nhiều loại cửa sổ khác nhau như: full screen
windows (toàn màn hình), floating (khi dùng windowsIsFloating ), nằm lồng bên
trong một Activity khác khi sử dụng ActivityGroup.
 Vòng đời của một Activity
Các hoạt động trong hệ thống được quản lý bởi một cấu trúc dữ liệu ngăn xếp.
Khi có một hoạt động được khởi tạo, nó được đẩy vào trong ngăn xếp, chuyển sang
trạng thái thực thi và hoạt trộng trước đó sẽ chuyển sang trạng thái chờ. Hoạt động này
chỉ trở lại trang thái kích hoạt khi mà hoạt động vừa khởi tạo kết thúc việc thực thi.
Một Activity có 3 trạng thái chính:
 Active hoặc running khi nó ở trên nhất màn hình và nhận tương tác
người dùng.

 Paused khi Activity không còn là trọng tâm trên màn hình nhưng vẫn
hiện thị trước người dùng.
 Stopped khi một Activity hoàn toàn bị che khuất, nó sẽ rơi vào trạng
thái Stopped. Tuy nhiên, nó vẫn còn lưu trữ toàn bộ thông tin trạng thái.
Và nó thường bị hệ thống đóng lại khi có tình trạng thiếu bộ nhớ.
Khi chuyển giữa các trạng thái, ứng dụng sẽ gọi các hàm callback ứng với các
bước chuyển:
 void onCreate(Bundle savedInstanceState)
 void onStart()
 void onRestart()
 void onResume()
 void onPause()
 void onStop()
 void onDestroy()
Biểu đồ sau mô tả trạng thái trong vòng đời của một hoạt động. Hình chữ nhật
thể hiện các phương thức Callback mà chúng ta có thể khai báo để gọi thực thi một
số thao tác khi hoạt động chuyển sang trạng thái khác (phương thức Callback là
phương thức được gọi lại bởi một phương thức khác khi có một sự kiện xảy ra). Các
trạng thái chính của một hoạt động được thể hiện bởi các hình viên thuốc.
Vòng đời của một hoạt động có thể được thể hiện trong những hình sau:
21


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

Hình 1.5.2: Vòng đời của một Activity
Toàn bộ thời gian sống của một hoạt động bắt đầu từ lời gọi đầu tiên tới
phương thức onCreate(Bundle) tới lời gọi phương thức onDestroy(). Trong quá
trình này, một hoạt động sẽ khởi tạo lại tất cả các tài nguyên cần sử dụng trong
phương thức onCreate() và giải phóng chúng khi phương thức onDestroy() được

thực thi.
Thời gian sống có thể nhìn thấy của một hoạt động bắt đầu từ lời gọi tới
phương thức onStart(), cho tới khi phương thức onStop() của nó được thực thi.
22


Toàn bộ các tài nguyên đang được sử dụng bởi hoạt động vẫn tiếp tục được lưu giữ,
người dùng có thể thấy giao diện nhưng không tương tác được với hoạt động do
trong qua trình này hoạt động không ở trạng thái chạy tiền cảnh.
Thời gian sống tiền cảnh của một hoạt động là quá trình bắt dầu từ khi có lời
gọi tới phương thức onResume() và kết thúc bằng lời gọi tới phương thức
onPause(). Trong thời gian này, hoạt động chạy ở tiền cảnh và có thể tương tác với
người dùng.
1.4.4. Service
 Khái niệm
Một dịch vụ (service) là các đoạn mã được thực thi ngầm bởi hệ thống mà
người sử dụng không thấy được. Mỗi service đều được mở rộng từ lớp cơ sở là
service trong gói android.app. Có thể kết nối tới hoặc kích hoạt một Service thông
qua interface mà Service đưa ra.Ví dụ như một chương trình chơi nhạc, sẽ có vài
hoạt động cho phép người dùng duyệt danh sách các bài hát và lựa chọn bài nào để
phát. Tuy nhiên, chức năng chơi nhạc không được thiết kế như một hoạt động bởi
chúng ta sẽ muốn chuyển qua cửa sổ khác, như khi soạn tin nhắn thì bài nhạc vẫn
tiếp tục được chơi. Trong trường hợp này, ứng dụng chơi nhạc sẽ khởi tạo một dịch
vụ bằng cách sử dụng phương thức Context.startService().
Một ứng dụng có thể dễ dàng thực hiện liên kết tới một dịch vụ đang chạy
(thậm chí khởi động nếu nó chưa thực thi) bằng phương thức Context.bindService().
Khi đó dịch vụ này sẽ cung cấp cho ứng dụng cơ chế để giao tiếp với chúng thông
qua giao diện gọi là IBinder (đối với dịch vụ chơi nhạc có thể cho phép dừng hoặc
chuyển qua bài nhạc kế tiếp).
 Vòng đời của một dịch vụ

Vòng đời của một dịch vụ được hiểu là quá trình hoạt động từ khi nó được
tạo ra cho tới khi bị loại khỏi hệ thống. Có hai cách thức để một dịch vụ có thể được
chạy trong hệ thống:
Khi hệ thống có lời gọi tới phương thức Context.startService(). Trong trường
hợp này, dịch vụ sẽ được thực hiện liên tục cho tới khi hệ thống gọi phương thức
Context.stopService().

23


Khi các ứng dụng gọi phương thức Context.bindService() để tạo kết nối với
dịch vụ (dịch vụ sẽ được khởi tạo nếu tại thời điểm đó nó đang không hoạt động).
Ứng dụng sẽ nhận được một đối tượng IBinder do dịch vụ trả lại để có thể gọi các
phương thức Callback phù hợp để truy cập tới các trạng thái của dịch vụ. Nếu do lời
gọi Context.bindService() mà dịch vụ được khởi tạo thì nó sẽ được thực thi cho tới
khi nào kết nối trên (tức là đối tượng IBinder) vẫn còn tồn tại.

Hình 1.6: Sơ đồ chuyển trạng thái của Service
1.4.5. Bộ nhận quảng bá (Broadcast receivers)
Bộ nhận quảng bá là một thành phần không làm gì cả nhưng nó nhận và phản
hồi lại các thông báo quảng bá. Nhiều quảng bá có nguồn gốc từ mã hệ thống, ví dụ
thông báo thay đổi múi giờ, pin yếu, ảnh đã chụp hay thay đổi ngôn ngữ. Các ứng
dụng có thể khởi động quảng bá, ví dụ để các ứng dụng khác biết rằng dữ liệu đã
được tải về xong trên thiết bị và sẵn sàng sử dụng.

24


Một ứng dụng có thể có bất kỳ số lượng bộ nhận quảng bá nào để nhận những
thông báo quan trọng với nó. Tất cả các bộ nhận quảng bá được kế thừa từ lớp

BroadcastReceiver.
Đây là thành phần phổ biến, nó luôn chạy ngầm trong hệ thống android với
mục đích thu thập các Intent thông báo từ hệ điều hành ví dụ như: có một sms gửi
đến, pin yếu, có cuộc gọi,…
Bộ nhận quảng bá không có giao diện. Tuy nhiên, chúng có thể khởi động một
hoạt động để đáp lại thông tin mà nó nhận được, hay chúng có thể sử dụng
NotificationManager để thông báo người dùng biết. Các thông báo có thể được sự
chú ý của người dùng theo các cách các nhau như là sáng màn hình, rung thiết bị,
bật âm thanh nào đấy… Thông thường, chúng đặt thông báo trên thanh trạng thái,
nơi người dùng có thể nhận được thông báo.

Hình 1.7. Broadcast Receiver trong Android
1.4.6. Content Provider
Các ứng dụng có thể lưu trữ dữ liệu của mình trong các tập tin hoặc sử dụng
cơ sở dữ liệu SQLite sẵn có v.v… Content Provider có chức năng cung cấp một tập
25


×