Ngày nay, với sự phát triển nhanh chóng của xã hội, nhu cầu cập nhật tin tức xã hội mọi lúc mọi nơi là rất cần thiết, vì vậy em đã chọn đề tài “Tìm hiểu về hệ điều hành Android và xây dự
Trang 1Lời cảm ơn Trong quá trình thực hiện báo cáo Khóa luận tốt nghiệp này em đã nhận được
sự quan tâm giúp đỡ tận tình của nhiều tập thể, cá nhân trong và ngoài trường
Trước hết, em xin bày tỏ lòng biết ơn sâu sắc tới giảng viên TS ĐẬU MẠNH HOÀN, Người đã trực tiếp hướng dẫn em trong suốt quá trình nghiên cứu và thực hiện
đề tài
Em xin chân thành cảm ơn các thầy giáo, cô giáo trong khoa Kỹ thuật - Công nghệ thông tin Trường Đại học Quảng Bình đã tạo mọi điều kiện thuận lợi giúp đỡ em trong suốt quá trình học tập và rèn luyện tại trường
Em xin bày tỏ lòng biết ơn vô hạn tới gia đình, người thân và bạn bè đã luôn sát cánh bên em trong suốt quá trình học tập và nghiên cứu đề tài
Mặc dù trong quá trình nghiên cứu đề tài, bản thân em có những cố gắng nhất định, song do trình độ và thời gian có hạn nên đề tài không tránh khỏi những thiếu sót Vậy kính mong các thầy cô giáo và các bạn đóng góp ý kiến để đề tài của em được hoàn thiện hơn và rất mong sản phẩm hiện thực của em sẽ trở thành một sản phẩm mang tính xã hội và phục vụ được trong điều kiện phát triển của nghành CNTT Việt Nam
Em xin chân thành cảm ơn!
Quảng Bình, ngày 25 tháng 05 năm 2017
Sinh viên
Trần Nhật Linh
Trang 2
MỤC LỤC
A TỔNG QUAN ĐỀ TÀI 1
1.Lý do chọn đề tài 1
2.Mục tiêu nghiên cứu 1
3.Nội dung nghiên cứu 1
4.Đối tượng, phạm vi nghiên cứu 2
5.Phương pháp nghiên cứu: 2
B NỘI DUNG ĐỀ TÀI 3
CHƯƠNG I: TỔNG QUAN VỀ HỆ ĐIỀU HÀNH VÀ HỆ ĐIỀU HÀNH ANDROID 3 1 Hệ điều hành là gì ? 3
1.1 Tầm nhìn người dùng 3
1.2 Tầm nhìn hệ thống 4
1.3 Mục tiêu hệ thống 5
1.4 Tóm tắt 6
2 Giới thiệu về hệ điều hành ANDROID 7
2.1 Giới thiệu hệ điều hành Android 7
2.2 Lịch sử hệ điều hành Android 8
2.3 Kiến trúc của Android 12
2.4 Giao diện người dùng trong Android 15
2.5 Những thách thức đối với hệ điều hành Android 17
2.6 Chu kỳ ứng dụng Android 19
CHƯƠNG II: PHÂN TÍCH XML TRONG ANDROID 25
1.Tổng quan về XML 25
1.1 Khái niệm 25
1.2 Đặc điểm của XML 25
2 RSS 26
2.1 Những điểm mạnh của RSS 27
3 Các lớp, giao diện phân tích XML trong Android 28
3.1 Giao diện DOM 28
3.2 Giao diện SAX 29
4 Phân tích nội dung XML trong Android sử dụng SAX 30
4.1 Sơ lược về SAX 30
4.2 Ưu điểm, nhược điểm của SAX 30
4.3 Các khái niệm dùng trong SAX 31
5 Các thành phần trong một Android Project 31
5.1 AndroidManifest.xml 31
5.2 File R.java 33
CHƯƠNG III GIỚI THIỆU VỀ ANDROID STUDIO 36
1 ANDROID STUDIO 36
1.1 Cài đặt môi trường Environment Setup 36
1.2 Building, Debugging và Testing 37
1.3 Signing và Publishing 38
1.4 Android project View 38
1.5 Android Build System 39
1.6 Project Debug và Performance 40
1.7 Performance analysis tools 40
Trang 31.8 Code inspections – the Android lint tool 41
1.9 Log messages 41
1.10 Bắt đầu dùng Android studio 42
1.10.1 Khởi tạo Rroject 42
1.10.2 Cấu hình cho dự án Android 43
1.10.3 Kiểm tra cấu trúc dữ liệu 45
1.10.4 Tạo thiết bị AVD 46
1.10.5 Test chạy ứng dụng 48
1.10.6 Application Debugging 50
CHƯƠNG IV: DEOMO ỨNG DỤNG 51
1 Ứng dụng đọc báo trên di động MyWeb: 51
2 Phân tích yêu cầu 51
3 Biểu đồ Usecase 51
4 Cách lấy tin từ 1 Trang báo RSS 52
5 Giao diện người dùng 55
6 Parser dữ liệu từ server gửi về 56
C KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 60
1 Kết luận 60
2 Hướng phát triển của đề tài: 60
TÀI LIỆU THAM KHẢO 61
Trang 4DANH MỤC TỪ VIẾT TẮT Tiếng việt:
RSS Really Simple Syndication
SGML Standard Generalized Markup Language
UTF-8 Unicode Transformation Format 8-Bit
Trang 5DANH MỤC HÌNH ẢNH
Hình 1.1 Tầm nhìn trừu tượng các thành phần của một hệ thống máy tính 3
Hình 1 2 Cấu trúc Stack hẹ thống Android 12
Hình 1 3 chu kỳ sống của ứng dụng 20
Hình 1 4 Activity Stack 20
Hình 1 5 Chu kỳ sống của Activity 21
Hình 1 6 Gọi hàm transition 22
Hình 2.1 SAX parsing 31
Hình 3.1 AVD Manager 37
Hình 3.2 Gradle Scripts 38
Hình 3.3 Hệ thống phân cấp cảu project 39
Hình 3.4 Build System 39
Hình 3.5 Memory Monitor 40
Hình 3.6 file heap snapshot 41
Hình 3.7 Code inspections 41
Hình 3.8 Log meseger 42
Hình 3.9 Start new Android Studio project 42
Hình 3.10 Create new project 43
Hình 3.11 Create Name Application 43
Hình 3.12 chọn Minimum SDK 44
Hình 3.13 chọn mẫu Activity 44
Hình 3 14 cài đặt thông tin của Activity 45
Hình 3.15 kiểm tra cấu trúc dữ liệu 46
Hình 3.16 tạo thiết bị AVD 47
Hình 3.17 chon phiên bản Android 48
Hình 3.18 cấu hình thiết bị AVD 48
Hình 3.19 chọn thiết bị chạy thử 49
Hình 3.20 thiết bị ảo 49
Hình 3.21 Application Debugging 50
Hình 4.1 trang báo điện tử VnExpress 52
Hình 4.2 Danh mục link RSS 53
Hình 4 3 Link RSS và tin RSS 53
Hình 4.4 giao diện ứng dụng 55
Hình 4.5 tin chi tiết 56
Hình 4 6 Danh mục tin tức 56
Trang 6A TỔNG QUAN ĐỀ TÀI
1 Lý do chọn đề tài
Mạng điện thoại di động xuất hiện tại Việt Nam từ đầu những năm 1990 và theo thời gian số lượng các thuê bao cũng như các nhà cung cấp dịch vụ đi động tại Việt Nam ngày càng tăng Do nhu cầu trao đổi thông tin ngày càng nhiều và nhu cầu sử dụng sản phẩm công nghệ cao nhiều tính năng, cấu hình cao, chất lượng tốt, kiểu dáng mẫu mà đẹp, phong phú nên nhà cung cấp phải luôn luôn cải thiện, nâng cao những sản phẩm của mình Do đó việc xây dựng các ứng dụng cho điện thoại di động đang là một ngành công nghiệp mới đầy tiềm năng và hứa hẹn nhiều sự phát triển vượt bậc của ngành khoa học kĩ thuật Cùng với sự phát triển của thị trường điện thoại di động là sự phát triển mạnh mẽ của xu hướng lập trình phần mềm ứng dụng cho các thiết bị di động Phần mềm, ứng dụng cho điện thoại di động hiện nay rất đa dạng và phong phú trên các hệ điều hành di động cũng phát triển mạnh mẽ và đang thay đổi từ ngày Các
hệ điều hành J2ME, Android, IOS, Hybrid, Web based Mobile Application đã rất phát triển trên thị trường truyền thông di động Tuy nhiên, với hơn 72% thị phần điện thoại thông minh sử dụng nền tảng Android, đã chứng minh được nền tảng Android có rất nhiều ưu điểm so với các nền tảng khác Android đã nhanh chóng là đối thủ cạnh tranh mạnh mẽ với các hệ điều hành trước đó và đang là hệ điều hành di động của tương lai
và được nhiều người ưa chuộng nhất Ngày nay, với sự phát triển nhanh chóng của xã hội, nhu cầu cập nhật tin tức xã hội mọi lúc mọi nơi là rất cần thiết, vì vậy em đã chọn
đề tài “Tìm hiểu về hệ điều hành Android và xây dựng ứng dụng đọc báo online trên
nay một cách nhanh chóng và tiện lợi
2 Mục tiêu nghiên cứu
Tìm hiểu tổng quan về hệ điều hành và hệ điều hành Android
Nghiên cứu phân tích XML trong android
Xây dựng demo ứng dụng app đọc báo trên hệ điều hành Android
3 Nội dung nghiên cứu
Tìm hiểu tổng quan về hệ điều hành và hệ điều hành Android
Định nghĩa khái niệm hệ điều hành và hệ điều hành Android
Tìm hiểu về sự hình thành và phát triển của hệ điều hành và hệ điều hành Android
Trang 7 Thành phần và giao diện của Android
Kiến trúc và phương thức hoạt động của Android
Nghiên cứu phân tích XML trong android
Tìm hiểu định nghĩa khái niệm và cấu trúc XML trong Android
Tìm hiểu về RSS, các lớp và giao diện phân tích XML trong Android
Phân tích nội dung XML sử dụng SAX
Nghiên cứu về công cụ hỗ trợ lập trình ANDROID STUDIO
+ Tìm hiều về sự hình thành và môi trường làm việc của Android studio
Xây dựng ứng dụng đọc báo và Demo ứng dụng
+ Nghiên cứu các kỹ thuật lập trình để xây dựng ứng dụng
+ Trình bày về ứng dụng đã làm được, tính năng và giao diện của ứng dụng đọc báo online trong Android
4 Đối tượng, phạm vi nghiên cứu
Đối tượng nghiên cứu: Hệ điều hành và hệ điều hành Android, đặc biệt là XML trong hệ điều hành Android
Phạm vi: Hệ điều hành nói chung và hệ điều hành Android nói riêng
Nghiên cứu về kỹ thuật lập trình để hỗ trợ cho quá trình xây dựng ứng dụng đọc báo trên Hệ điều hành Android
5 Phương pháp nghiên cứu:
Phương pháp nghiên cứu lý thuyết
+ Nghiên cứu lý thuyết về hệ điều hành và hệ điều hành Android
+ Nghiên cứu về ngôn ngữ lập trình java để xây dựng ứng dụng đọc báo RSS trên Android
Phương pháp nghiên cứu thực nghiệm:
Sử dụng phương pháp nghiên cứu lý thuyết kết hợp với nghiên cứu thực nghiệm + Nghiên cứu các công cụ lập trình để xây dựng ứng dụng đọc báo RSS trên Android
+ Viết chương trình cho chạy ứng dụng đọc báo RSS trên Android
Trang 8B NỘI DUNG ĐỀ TÀI
CHƯƠNG I: TỔNG QUAN VỀ HỆ ĐIỀU HÀNH VÀ HỆ ĐIỀU HÀNH
ANDROID
1 Hệ điều hành là gì ?
Một hệ điều hành là một thành phần quan trọng của mọi hệ thống máy tính Một
hệ thống máy tính có thể được chia thành bốn thành phần: phần cứng, hệ điều hành, các chương trình ứng dụng và người dùng
Phần cứng (Hardware): bao gồm bộ xử lý trung tâm (CPU), bộ nhớ, thiết bị
xuất/nhập, …cung cấp tài nguyên cơ bản cho hệ thống
Các chương trình ứng dụng (application programs): trình biên dịch (compiler), trình soạn thảo văn bản (text editor), hệ cơ sở dữ liệu (database system), trình duyệt Web, …định nghĩa cách mà trong đó các tài nguyên được sử dụng để giải quyết yêu
cầu của người dùng
Người dùng (user): có nhiều loại người dùng khác nhau, thực hiện những yêu
cầu khác nhau, do đó sẽ có nhiều ứng dụng khác nhau
Hệ điều hành (operating system): hay còn gọi là chương trình hệ thống, điều khiển và hợp tác việc sử dụng phần cứng giữa những chương trình ứng dụng khác nhau cho những người dùng khác nhau Hệ điều hành có thể được khám phá từ hai
Trang 9chuột và bộ xử lý hệ thống (system unit) Một hệ thống như thế được thiết kế cho một người dùng độc quyền sử dụng tài nguyên của nó để tối ưu hoá công việc mà người dùng đang thực hiện Trong trường hợp này, hệ điều hành được thiết kế dễ dàng cho việc sử dụng với sự quan tâm về năng lực nhưng không quan tới việc sử dụng tài nguyên Năng lực thực hiện là quan trọng với người dùng nhưng không là vấn đề nếu hầu hết hệ thống đang rãnh, chờ tốc độ xuất/nhập chậm từ phía người dùng
Vài người dùng ngồi tại thiết bị đầu cuối (terminal) được nối kết tới máy tính lớn (mainframe) hay máy tính tầm trung (minicomputer) Những người khác đang truy xuất cùng máy tính thông qua các thiết bị đầu cuối khác Những người dùng này chia
sẻ các tài nguyên và có thể trao đổi thông tin Hệ điều hành được thiết kế để tối ưu hoá việc sử dụng tài nguyên-để đảm bảo rằng tất cả thời gian sẳn dùng của CPU, bộ nhớ và thiết bị xuất nhập được sử dụng hữu hiệu và không cá nhân người dùng sử dụng độc quyền tài nguyên hơn là chia sẻ công bằng
Những người dùng khác ngồi tại trạm làm việc, được nối kết tới mạng của các trạm làm việc khác và máy chủ Những người dùng này có tài nguyên tận hiến là trạm làm việc của mình nhưng họ cũng chia sẻ các tài nguyên trên mạng và các máy chủ- tập tin, tính toán và các máy phục vụ in Do đó, hệ điều hành của họ được thiết kế để thoả hiệp giữa khả năng sử dụng cá nhân và việc tận dụng tài nguyên
Gần đây, sự đa dạng của máy tính xách tay trở thành thời trang cho những người làm việc trong lãnh vực công nghệ thông tin Các thiết bị này được sử dụng chỉ bởi cá nhân người dùng Một vài máy tính này được nối mạng hoặc nối trực tiếp bằng dây hay thông qua các modem không dây Do sự giới hạn về năng lượng (điện) và giao diện, chúng thực hiện tương đối ít các thao tác ở xa Hệ điều hành được thiết kế chủ yếu cho việc sử dụng cá nhân nhưng năng lực thực hiện trên thời gian sống của pin cũng là yếu tố quan trọng
Một số máy tính có rất ít hay không có tầm nhìn người dùng Thí dụ, các máy tính được nhúng vào các thiết bị gia đình và xe ôtô có thể có một bảng số và các đèn hiển thị trạng thái mở, tắt nhưng hầu hết chúng và các hệ điều hành được thiết kế để chạy mà không cần giao tiếp
1.2 Tầm nhìn hệ thống
Từ quan điểm của máy tính, hệ điều hành là chương trình gần gủi với phần cứng Chúng ta có thể thấy một hệ điều hành như bộ cấp phát tài nguyên Hệ thống máy tính
Trang 10có nhiều tài nguyên - phần cứng và phần mềm - mà có thể được yêu cầu để giải quyết một vấn đề: thời gian CPU, không gian bộ nhớ, không gian lưu trữ tập tin, các thiết bị xuất/nhập, Hệ điều hành hoạt động như bộ quản lý tài nguyên Đương đầu với một lượng lớn các yêu cầu có thể xung đột về tài nguyên, hệ điều hành phải quyết định cách cấp phát tài nguyên tới những chương trình cụ thể và người dùng để có thể điều hành hệ thống máy tính hữu hiệu và công bằng
Một tầm nhìn khác của hệ điều hành nhấn mạnh sự cần thiết để điều khiển các thiết bị xuất/nhập khác nhau và chương trình người dùng Một hệ điều hành là một chương trình điều khiển Chương trình điều khiển quản lý sự thực thi của các chương trình người dùng để ngăn chặn lỗi và việc sử dụng không hợp lý máy tính Nó đặc biệt quan tâm với những thao tác và điều khiển các thiết bị nhập/xuất
Nhìn chung, không có định nghĩa hoàn toàn đầy đủ về hệ điều hành Các hệ điều hành tồn tại vì chúng là cách hợp lý để giải quyết vấn đề tạo ra một hệ thống máy tính
có thể sử dụng Mục tiêu cơ bản của hệ thống máy tính là thực thi chương trình người dùng và giải quyết vấn đề người dùng dễ dàng hơn Hướng đến mục tiêu này, phần cứng máy tính được xây dựng Tuy nhiên, chỉ đơn thuần là phần cứng thì không dễ sử dụng và phát triển các chương trình ứng dụng Các chương trình khác nhau này đòi hỏi những thao tác chung nào đó, chẳng hạn như điều khiển thiết bị xuất/nhập
Sau đó, những chức năng chung về điều khiển và cấp phát tài nguyên được đặt lại với nhau vào một bộ phận phần mềm gọi là hệ điều hành
Cũng không có định nghĩa bao quát nào được chấp nhận để xác định phần gì thuộc về hệ điều hành, phần gì không Một quan điểm đơn giản là mọi thứ liên quan khi chúng ta ra lệnh hệ điều hành nên được xem xét Tuy nhiên, những yêu cầu về bộ nhớ và những đặc điểm bên trong rất khác nhau trong từng hệ thống Một định nghĩa bao quát hơn về hệ điều hành là một chương trình chạy liên tục trên máy tính (thường gọi là nhân kernel), những chương trình còn lại thuộc về chương trình ứng dụng
1.3 Mục tiêu hệ thống
Định nghĩa những gì hệ điều hành làm thì dễ hơn xác định hệ điều hành là gì Mục đích chính của hệ điều hành là dễ dàng sử dụng Vì sự tồn tại của hệ điều hành hỗ trợ nhiều cho máy tính trong việc đáp ứng các ứng dụng của người dùng Tầm nhìn này đặc biệt rõ ràng hơn khi nhìn hệ điều hành trên các máy tính cá nhân
Trang 11Mục tiêu thứ hai của hệ điều hành là điều hành hữu hiện hệ thống máy tính Mục tiêu này đặc biệt quan trọng cho các hệ thống lớn, được chia sẻ, nhiều người dùng Những hệ thống tiêu biểu này khá đắt, khai thác hiệu quả nhất các hệ thống này luôn là điều mong muốn Tuy nhiên, hai mục tiêu tiện dụng và hữu hiệu đôi khi mâu thuẫn nhau Trong quá khứ, xem xét tính hữu hiệu thường quan trọng hơn tính tiện dụng Do
đó, lý thuyết hệ điều hành tập trung nhiều vào việc tối ưu hoá sử dụng tài nguyên tính toán Hệ điều hành cũng phát triển dần theo thời gian Thí dụ, UNIX bắt đầu với bàn phím và máy in như giao diện của nó giới hạn tính tiện dụng đối với người dùng Qua thời gian, phần cứng thay đổi và UNIX được gắn vào phần cứng mới với giao diện thân thiện với người dùng hơn Nhiều giao diện người dùng đồ hoạ GUIs (graphical user interfaces) được bổ sung cho phép tiện dụng hơn với người dùng trong khi vẫn quan tâm tính hiệu quả
Thiết kế hệ điều hành là một công việc phức tạp Người thiết kế gặp phải nhiều
sự thoả hiệp trong thiết kế và cài đặt Nhiều người tham gia không chỉ mang đến hệ điều hành những lợi điểm mà còn liên tục xem xét và nâng cấp
Để thấy rõ những hệ điều hành là gì và những gì hệ điều hành làm, chúng ta xem xét cách chúng phát triển trong bốn mươi lăm năm qua Bằng cách lần theo sự tiến triển, chúng ta có thể xác định những thành phần của hệ điều hành và thấy cách thức
và lý do hệ điều hành phát triển như chúng có
Hệ điều hành và kiến trúc máy tính có mối quan hệ khăng khít nhau Để dễ dàng
sử dụng phần cứng, hệ điều hành được phát triển Sau đó, các người dùng hệ điều hành
đề nghị những chuyển đổi trong thiết kế phần cứng để đơn giản chúng Nhìn lại lịch sử ngắn ngủi này, chú trọng cách giải quyết những vấn đề về hệ điều hành để giới thiệu những đặc điểm phần cứng
1.4 Tóm tắt
Hệ điều hành được phát triển hơn 45 năm qua với hai mục đích chính
Mục đích thứ nhất, hệ điều hành cố gắng lập thời biểu các hoạt động tính toán
để đảm bảo năng lực thực hiện của hệ thống là tốt
Mục đích thứ hai, nó cung cấp một môi trường tiện dụng để phát triển và thực thi chương trình
Ban đầu, hệ thống máy tính được dùng từ một màn hình và bàn phím (thiết bị đầu cuối) Các phần mềm như bộ hợp ngữ (assembler), bộ nạp (loader), bộ liên kết
Trang 12(linkers) và các trình biên dịch (compiler) cải tiến sự tiện dụng của việc lập trình hệ thống nhưng cũng yêu cầu thời gian thiết lập đáng kể Để giảm thời gian thiết lập, các phương tiện thuê người điều hành và các công việc tuơng tự được bó
Các hệ thống xử lý theo lô cho phép sắp xếp công việc tự động bởi hệ điều hành
và cải tiến rất nhiều việc tận dụng toàn bộ máy tính Máy tính không còn phải chờ các thao tác của người dùng Tuy nhiên, việc tận dụng CPU vẫn còn thấp vì tốc độ của thiết bị xuất nhập thấp hơn nhiều so với tốc độ của CPU Thao tác ngoại vi (off-line operation) của các thiết bị chậm cung cấp một phương tiện sử dụng nhiều hệ thống bộ đọc tới băng từ (reader-to-tape) và băng từ tới máy in (tape-to-printer) cho một CPU
Để cải tiến toàn bộ năng lực thực hiện của hệ thống máy tính, người phát triển giới thiệu khái niệm đa chương để mà nhiều công việc có thể được giữ cùng lúc trong bộ nhớ tại cùng một thời điểm CPU được chuyển qua lại giữa chúng để gia tăng việc tận dụng CPU và giảm toànbộ thời gian được yêu cầu để thực thi các công việc
2 Giới thiệu về hệ điều hành ANDROID
2.1 Giới thiệu hệ điều hành Android
Android là một hệ điều hành di động dựa trên một phiên bản sửa đổi của hệ điều hành Linux
Được phát triển vào năm 2005 với một dự án cùng tên “Android” Như một phần chiến lược của mình để lấn sâu vào lĩnh vực di động Google Android đã mua về toàn
bộ quá trình phát triển cũng như đội phát triển nó
Google Android muốn mở và miễn phí, vì cậu hầu hết các mã android được được đưa ra dưới dạng mã nguồn mở Apache License, điều này tương đương với việc bất cứ
ai muốn sử dụng android có thể làm như vậy bằng cách tải về mã nguồn android đầy
đủ Hơn nữa các nhà cung cấp (thường là những nhà phát triển phần cứng) có thể thêm phần mở rộng và tùy biến cho android để phân biệt sản phẩm của họ với sản phẩm của những người khác Điều này đơn giản làm làm cho mô hình phát triển android rất hấp dẫn và do đó khơi dậy sự quan tâm của nhiều nhà cung cấp Điều này đặc biệt đúng với các công ty bị ảnh hưởng bởi hiện tượng này như là Iphone của Apple, một sản phẩm cực kì thành công trong công cuộc cách mạng hóa ngành công nghiệp smartphone Các công ty này bao gồm Motorola và Sony Ericsson mà trong nhiều năm
đã phát triển được hệ điều hành riêng cho điện thoại di động của họ Kho Iphone được đưa ra, một số những nhà sản xuất đã tìm được một con đường mới để làm sống dậy
Trang 13sản phẩm của họ Những nhà sản xuất coi android như một giải pháp – họ sẽ tiếp tục thiết kế phần cứng của riêng mình và sử dụng adroid như một hệ điều hành chính
Ưu điểm chính của việc áp dụng android là nó cung cấp một cách tiếp cận thống nhất để phát triển ứng dụng Các nhà phát triển chỉ cần phát triển cho android và các ứng dụng của họ có thể chạy trên nhiều thiết bị khác nhau, miễn là các thiết bị được hỗ trợ bằng cách sử dụng android Trong thế giới smartphone ứng dụng là một phần quan trọng nhất của chuỗi thành công Do đó các nhà sản xuất thiết bị coi android như là hy vọng tốt nhất để thách thức sự tấn công của Iphone
Rich Miner (nhà đồng sáng lập công ty truyền thông Wildfire Communications)
Nick Sears (một trong những vị phó chủ tịch của nhà cung cấp mạng viễn thông
di động T-Mobile ở Mỹ)
Chris White (trưởng bộ phận thiết kế và phát triển giao diện của WebTV) Năm 2005, sau hơn 2 năm hoạt động thì Android được Google mua lại với một khoản tiền không được tiết lộ và chính thức trở thành một trong những công ty con của
gã khổng lồ ngành tìm kiếm Đồng thời cả Andy Rubin, Rich Miner và Chris White đều quyết định tiếp tục làm việc tại chính công ty của mình sau khi được mua lại Ở thời điểm đó, nhiều người không thực sự chú ý vào thương vụ này, thế nhưng nó lại đánh dấu bước đi đầu tiên của Google trong thị trường thiết bị di động thế giới
Tại Google, một nhóm nghiên cứu đứng đầu là Rubin đã bắt đầu phát triển một nền tảng dành cho thiết bị di động dựa trên nhân của hệ điều hành Linux Và sau đó,
hệ điều hành này cũng được giới thiệu đến các nhà phát triển phần cứng lẫn phần mềm, báo hiệu sự có mặt của một "ngôi sao" khác trên "thiên hà" thị trường công nghệ
di động
Đến tháng 12 năm 2006, suy đoán về ý định gia nhập thị trường truyền thông di động của Google tiếp tục được củng cố sau khi BBC và The Wall Street Journal cho biết rằng hãng này muốn đưa ứng dụng và chức năng tìm kiếm của mình lên các thiết
Trang 14bị di động Lập tức ngay sau đó, nhiều tin đồn về chiếc điện thoại mang thương hiệu Google xuất hiện khắp các phương tiện truyền thông
Tháng 5 năm 2007, liên minh các nhà sản xuất thiết bị cầm tay - Open Handset Alliance (OHA) được thành lập bao gồm Google và một số thành viên khác của cộng đồng Linux mở như: Broadcom Corporation, Google, HTC, Intel, LG, Marvell Technology Group, Motorola, Nvidia, Qualcomm, Samsung Electronics, Sprint Nextel, T-Mobile và Texas Instruments Mục tiêu của OHA là phát triển tiêu chuẩn
mở cho các thiết bị di động và sản phẩm đầu tiên của liên minh này đó là Android, một nền tảng di động được xây dựng trên nhân Linux phiên bản 2.6
Tính cho đến thời điểm này, Google Android đã có 10 phiên bản chính thức và 1 phiên bản sắp ra mắt được đặt tên theo những món tráng miệng, với ngụ ý người dùng
sẽ dễ dàng sử dụng hệ điều hành của họ như thưởng thức các món ăn đó Các phiên bản Android có tên mã lần lượt là: Cupcake 1.5, Donut 1.6, Eclair 2.0, Froyo 2.2, Gingerbread 2.3, Honeycomb 3.0/3.1, Android Ice Cream Sandwich 4.0, Jelly Bean
Đa chương cũng cho phép chia sẻ thời gian Hệ điều hành chia sẻ thời gian cho phép nhiều người dùng (từ một tới vài trăm) sử dụng hệ thống máy tính giao tiếp tại cùng một thời điểm PC là máy vi tính; chúng xem như nhỏ hơn và rẻ hơn hệ thống mainframe Các hệ điều hành cho các máy tính này lợi hơn việc phát triển hệ điều hành cho máy tính mainframe trong nhiều cách Tuy nhiên, vì mỗi cá nhân là người dùng duy nhất sử dụng máy tính nên việc tận dụng CPU không còn là mối quan tâm chủ yếu Do đó, một vài quyết định thiết kế được thực hiện cho hệ điều hành cho máy mainframe có thể không phù hợp cho cả hệ thống nhỏ và lớn, hiện nay khi các PCs có thể được nối kết tới các máy tính khác và người dùng thông qua mạng và Web
Các hệ song song có nhiều hơn một CPU trong giao tiếp gần; các CPU chia sẻ bus máy tính và đôi khi chia sẻ bộ nhớ và các thiết bị ngoại vi Những hệ thống như thế có thế cung cấp thông lượng và khả năng tin cậy tăng Các hệ thống phân tán cho phép chia sẻ tài nguyên trên những máy chủ được phân tán về mặt địa lý Các hệ thống được nhóm cho phép nhiều máy thực hiện việc tính toán trên dữ liệu được chứa trên thiết bị lưu trữ chia sẻ và để việc tính toán tiếp tục trong trường hợp lỗi của tập hợp con các thành viên nhóm
Một hệ thời thực cứng thường được dùng như một thiết bị điều khiển trong một ứng dụng tận hiến Một hệ điều hành thời thực cứng có ràng buộc hoàn toàn xác định
Trang 15và thời gian cố định Xử lý phải được thực hiện trong các ràng buộc được xác định hoặc hệ thống sẽ bị lỗi Các hệ thống thời thực mềm có ràng buộc thời gian ít nghiêm khắc hơn và không hỗ trợ thời biểu tới hạn
Gần đây sự tác động của Internet và World Wide Web khuyến khích sự phát triển của các hệ điều hành hiện đại Các hệ điều hành này chứa các trình duyệt Web, mạng
và phần mềm truyền Chúng ta đã thể hiện tiến trình luận lý của sự phát hệ điều hành, được định hướng bởi sự bao gồm các đặc điểm trong phần cứng CPU được yêu cầu cho chức năng tiên tiến Xu hướng này có thể được thấy ngày nay trong cuộc cách mạng của PC, với phần cứng ngày một rẻ hơn và đang được cải tiến đủ để cho phép cải tiến các đặc điểm
Trang 16Phiên bản 1.5 (Cupcake): Ra mắt tháng 4/2009: Phiên bản này có một số tính năng đáng chú ý như: khả năng ghi lại và xem video thông qua chế độ máy ghi hình, tải video lên YouTube và ảnh lên Picasa trực tiếp từ điện thoại, tích hợp bàn phím ảo với khả năng đoán trước văn bản, tự động kết nối với một thiết bị Bluetooth trong một khoảng cách nhất định, các widget và thư mục mới có thể cài đặt linh động trên màn hình chủ
Phiên bản 1.6 (Donut): Ra mắt tháng 9/2009: Phiên bản này giúp Nâng cao trải nghiệm trên kho ứng dụng Android Market, tích hợp giao diện tùy biến cho phép người dùng xóa nhiều ảnh cùng lúc, nâng cấp Voice Search, nâng cấp khả năng tìm kiếm bookmarks, history, contacts và web trên màn hình chủ, bước đầu hỗ trợ màn hình độ phân giải WVGA
Phiên bản 2.0/2.1 (Eclair): Ra mắt tháng 10/2009 Phiên bản này có sự cải thiện
rõ rệt trong giao diện người dùng, tối ưu hóa tốc độ phần cứng, hỗ trợ nhiều kích cỡ và
độ phân giải màn hình hơn, thay đổi giao diện duyệt web và hỗ trợ chuẩn HTML5, Exchange ActiveSync 2.5, nâng cấp Google Maps 3.1.2, camera zoom kĩ thuật số tích hợp đèn flash, nâng cấp bàn phím ảo và kết nối Bluetooth 2.1
Phiên bản 2.2 (Froyo): Ra mắt tháng 5/2010: Phiên bản này chú trọng nâng cấp tốc độ xử lí, giới thiệu engine Chrome V8 JavaScript, hỗ trợ Adobe Flash10.1, thêm tính năng tạo điểm truy cập Wi-Fi Một tính năng đáng chú ý khác hỗ trợ chuyển đổi nhanh chóng giữa các ngôn ngữ và từ điển trên bàn phím đồng thời cho phép cài đặt và cập nhật ứng dụng ở các thiết bị mở rộng bộ nhớ Một trong những smartphone đầu tiên chạy phiên bản Android 2.2 Froyo là LG Optimus One
Phiên bản 2.3 (Gingerbread): Ra mắt tháng 12/2010: Phiên bản này đã nâng cấp đáng kể giao diện người dùng, cải thiện bàn phím ảo, thêm tính năng copy/paste, hỗ trợ công nghệ giao tiếp tầm sóng ngắn NFC, hỗ trợ chuẩn video WebM và nâng cao tính năng copy–paste Cùng với phiên bản Gingerbread, Google cũng ra mắt điện thoại đầu tiên của hãng sử dụng nền tảng này là Google Nexus S
Phiên bản 3.0 (Honeycomb): Ra mắt tháng 2/2011: Đây là phiên bản hệ điều hành dành riêng cho máy tính bảng tablet với giao diện mới tối ưu hóa cho tablet, từ các thao tác đều phụ thuộc màn hình cảm ứng (như lướt web, duyệt mail ) Honeycomb hỗ trợ bộ xử lí đa nhân và xử lý đồ họa đồng thời hỗ trợ nhiều màn hình home khác nhau, cho phép người dùng dễ dàng tùy biến giao diện nếu muốn
Trang 17Phiên bản 4.0 (Icecream Sandwich): Ra mắt tháng 10/2011: Được Google giới thiệu như một bản nâng cấp toàn diện cho các phiên bản trước đó với rất nhiều thay đổi, từ cách sử dụng cho đến giao diện và bổ sung nhiều tính năng mới Trong tương lai, Android 4.0 sẽ tiếp tục xuất hiện trên cả những chiếc điện thoại lẫn máy tính bảng
và trên mọi phân khúc sản phẩm chứ không chỉ nhắm vào người dùng cao cấp
Phiên bản 4.1(Jelly Bean): Ra mắt tháng 6/2012: Hỗ trợ mạnh mẽ khả năng thực hiện các tác vụ bằng giọng nói, hỗ trợ mạnh các mạng xã hội, tăng khả năng kết nối cũng nhưng sự tiết kiệm điện đối với các thiết bị sử dụng Android
2.3 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
Hình 1 2 Cấu trúc Stack hẹ thống Android
2.3.1 Tầng ứng dụng:
Tại lớp trên cùng bạn sẽ tìm thấy các ứng dụng cho android (như điện thoại, danh
bạ, trình duyệt, …) cũng như các ứng dụng bạn tải về và cài đặt từ AndroidMarket hay bất lý ứng dụng nào bạn viết được tại tầng này Những chương trình viết ở tầng này
đều có dạng file có phần mở rộng là: apk Là tầng chủ yếu cho các lập trình viên viết
các ứng dụng game, tiện ích… cho người dùng Các ứng dụng ở tầng này có đặc điểm
là:
Viết bằ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 18có 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ử dung 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
2.3.2 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
Một “Resource Manager” cung cấp truy xuất tới các tài nguyên không phải là
mã nguồn, chẳng hạn như: localized strings, graphics, and layout files
Một “Notifycation Manager” cho phép tất cả các ứng dụng hiển thị các custom alerts trong status bar
Activity Maanager được dùng để quản lý chu trình sống của ứng dụng và điều hướng các activity
Trang 192.3.3 Library
Android bao gồm một tập hợp các thư viện C/C++ được sử dụng bởi nhiều thành phần khác nhau trong hệ thống Android Đ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:
Media Libraries - based on PacketVideo's OpenCORE; the libraries support playback and recording of many popular audio and video formats, as well as static image files, including MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG
Surface Manager – Quản lý việc truy xuất vào hệ thống hiển thị
LibWebCore - a modern web browser engine which powers both the Android browser and an embeddable web view
SGL - the underlying 2D graphics engine
3D libraries –Thư viên sử dụng để tăng tốc phần 3D cứng hoặc phần mềm3D được tối ưu hóa cao
FreeType – Vẽ vector, phông chữ
SQLite – Cơ sở dữ liệu quan hệ nhúng, mở mã nguồn
2.3.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
2.3.5 Linux kernel
Android dựa trên Linux phiên bản 2.6 cho hệ thống dịch vụ cốt lõi như security, memory management, process management, network stack, and driver model Kernel Linux hoạt động như một lớp trừu tượng hóa giữa phần cứng và phần còn lại của phần mềm stack
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 )
Trang 20 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, chủ yếu là trên bàn phím chạm
Wifi Driver: Hệ thống điều khiển 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 ghilên các thiết bị nhớ như thẻ SD
2.4 Giao diện người dùng trong Android
Giao diện người dùng trong Android Trong một ứng dụng Android, giao diện người dùng được xây dựng bằng cách sử dụng View và ViewGroup đối tượng Có nhiều loại quan điểm và các nhóm view, mỗi một trong số đó là hậu duệ của lớp View View objects là các đơn vị cơ bản của biểu hiện giao diện người dùng trên nền tảng Android Các class xem như là cơ sở phục vụ cho class con được gọi là "widget", trong
đó cung cấp đầy đủ các đối tượng thực hiện giao diện, giống như các lĩnh vực văn bản
và nút Class ViewGroup phục vụ như là cơ sở cho lớp con được gọi là " layouts", cung cấp các loại khác nhau của kiến trúc bố trí, như linear, tabular và relative
2.4.1 Các thành phần giao diện Widget
Có rất nhiều cách bố trí giao diện Sử dụng nhiều hơn và các loại khác nhau của các view group, bạn có thể cấu trúc views con và view groups trong vô số cách Xác định các nhóm xem được cung cấp bởi Android (gọi là layouts) bao gồm LinearLayout, RelativeLayout, TableLayout, GridLayout và khác Mỗi cung cấp một
bộ duy nhất của các thông số bố trí được sử dụng để xác định vị trí của views con và
cơ cấu layout Để tìm hiểu về một số các loại khác nhau của các view group được sử dụng cho một layout, đọc Giao diện đối tượng thường gặp Widget là một object View phục vụ như một giao diện để tương tác với người dùng Android cung cấp một tập các widgets thực hiện đầy đủ, giống như các button, Checkbox, và text-entry, do đó bạn có thể nhanh chóng xây dựng giao diện người dùng của bạn Một số widgets được cung
Trang 21cấp bởi Android phức tạp hơn, giống như một date picker, clock, và zoom controls Nhưng nó không giới hạn trong các loại widgets được cung cấp bởi các nền tảng Android
2.4.2 Bắt sự kiện trong Android
Android Khi đã thêm một số Views/widgets đến giao diện Để được thông báo về
UI events người dùng, cần phải làm một trong hai điều: Xác định một sự kiện nghe và đăng ký nó với các View Đây là cách lắng nghe sự kiện Các class View có một phương pháp gọi là On() Ví dụ: View.OnClickListener (để xử lý "nhấp chuột" trên một View), View.OnTouchListener (để xử lý các sự kiện màn hình cảm ứng trong một View), và View.OnKeyListener (để xử lý thiết bị ép quan trọng trong một View) Vì vậy nếu muốn View được thông báo khi nó là " clicked" (chẳng hạn như khi một nút được chọn), thực hiện và xác định OnClickListener của nó gọi method onClick() (nơi thực hiện các hành động sau khi nhấp chuột), và đăng ký nó vào Xem với setOnClickListener() Ghi đè một callback method hiện cho View Đây là những gì nên làm gì khi đã thực hiện lớp View của riêng bạn và muốn lắng nghe cho các sự kiện
cụ thể xảy ra trong nó Ví dụ về các sự kiện có thể xử lý bao gồm màn hình là touched onTouchEvent() khi trackball là di chuyển onTrack ballEvent() hoặc khi một phím trên thiết bị được nhấn onKeyDown() Điều này cho phép xác định các hành vi mặc định cho từng sự kiện bên trong tuỳ chỉnh View và xác định xem sự kiện này cần được thông qua ngày để View con khác Một lần nữa, đây là những callbacks View class, do đó, cơ hội duy nhất của bạn để xác định đó là khi bạn xây dựng một phần tùy chỉnh
2.4.3 Menu
Menu đơn có một phần quan trọng của giao diện người dùng trong một ứng dụng Menus cung cấp một giao diện đáng tin cậy cho thấy rằng các chức năng ứng dụng và cài đặt Trong trình đơn ứng dụng phổ biến nhất là tiết lộ bằng cách bấm phím MENU trên thiết bị Tuy nhiên, cũng có thể thêm Context Menus, có thể hiển thị khi người sử dụng máy nhấn và nắm giữ phím trên một mục Thực đơn cũng được hệ thống phân cấp cấu trúc bằng cách sử dụng một xem, nhưng bạn không xác định cấu trúc này cho mình Thay vào đó, xác định onCreateOptionsMenu() or onCreate Context Menu() gọi method cho hoạt động của mình và tuyên bố các mục mà mình muốn bao gồm trong menu của mình Trong một thời gian thích hợp, Android sẽ tự
Trang 22động tạo ra hệ thống View phân cấp cần thiết cho menu, và rút ra mỗi trong mỗi menu items đó
2.5 Những thách thức đối với hệ điều hành Android
2.5.1 Sự phân mảnh
Sự phân mảnh của Android là gì? Đó là sự phân chia thành nhiều loại khác nhau khi nói đến phiên bản Android, kích thước màn hình của những thiết bị Android, độ phân giải, giao diện, tên nhà sản xuất, model máy, Hiện tượng phân mảnh sẽ làm suy yếu khả năng tương tác trên cùng một nền tảng (ở đây là Android) Khi ứng dụng tương thích với phiên bản hệ điều hành này và thiết bị này lại không chạy được trên phiên bản khác và thiết bị khác sẽ gây khó khăn cho người dùng, nhà sản xuất và cả lập trình viên Vì vậy, các nhà cung cấp sẽ gặp trở ngại lớn khi cần tạo ra những ứng
dụng thích hợp với nhiều dòng máy khác nhau
2.5.2 Phần cứng ly tán
Phân hóa trong phần mềm đã tồi tệ, phân hóa trong phần cứng còn khó chịu hơn
Vì Android là HĐH mở nên ai cũng có thể sản xuất 1 smartphone chạy Android Có nghĩa là bạn sẽ có rất nhiều lựa chọn về phần cứng, chip 600Mhz hay 1Ghz, thậm chí
là lõi kép, RAM 512Mb hay 1Gb, bàn phím cứng hay không đều không thành vấn đề
Có lẽ nguyên nhân của vấn đề bắt nguồn từ bản chất của OHA Liên minh Android được thành lập bởi hàng loạt các công ty sản xuất chip điện tử cũng như phần cứng, một vài cái tên đáng chú ý có thể kể đến như HTC, Motorola, Samsung, Intel, Qualcomm, Nvidia Tất cả các thành viên đó chắc chắn đều muốn rằng Android có thể chạy ổn định trên phần cứng của mình, dẫn đến tính "dễ dãi" của Android là không thể tránh khỏi Nhìn chung, đó là một điểm mạnh của Android, nhưng cũng vì thế mà phần cứng của Android rải rác khắp thượng vàng hạ cám Riêng GPU đã có 4,5 kiến trúc xử lý Andreno của Qualcomm, PowerVR của Samsung, GeForce ULV của Nvidia
Điều này lại dẫn tới 1 hệ quả khác, đó là 1 phần mềm (game chẳng hạn) có thể chạy rất tốt trên 1 thiết bị, nhưng sang 1 thiết bị khác, có sức mạnh phần cứng tương đương (thậm chí là mạnh hơn), thì lại không thể hoạt động được Lý do là vì kiến trúc
xử lý không hỗ trợ Vì thế khi viết 1 game cho Android, nhà phát hành game sẽ phải
Trang 23viết game cho 4,5 hệ thống xử lý khác nhau, dẫn tới chi phí và thời gian phát triển tăng vọt
Sự tăng tiến của Android dẫn đến một hiệu ứng dây chuyền: Android phát triển càng nhanh, các sản phẩm được tung ra càng nhiều thì sự phân hóa càng sâu sắc và rõ rệt, kết quả là các nhà sản xuất sẽ càng cảm thấy "thối chí" khi việc phát triển phần mềm cho Android quá phức tạp Và bên chịu thiệt nhất tất nhiên vẫn là người sử dụng
2.5.3 Phân mảnh phiên bản
Do Google tung ra các phiên bản Android quá nhanh trong thời gian ngắn nên dẫn đến nhiều vấn đề Nếu một chiếc điện thoại Android muốn nâng cấp lên phiên bản mới hơn thì nhà sản xuất điện thoại đó phải hiệu chỉnh lại nhiều thứ Và việc cập nhập một sản phẩm cũ đắt hơn so với việc phát triển một sản phẩm mới Vì thế người ta chẳng buồn cập nhật, mà chỉ đơn giản là làm luôn ra 1 sản phẩm khác và đem tiếp thị, mặc người sử dụng mắc kẹt với những phiên bản phần mềm cũ kỹ
Điều này cộng với khi phát triển phần mềm, người lập trình luôn hướng tới số đông Vì thế ngay cả khi Android đã lên 2.3, thì phần lớn số lượng ứng dụng mới đưa lên Android Market vẫn được viết để tương thích với phiên bản 2.2 Chính điều này khiến cho người sử dụng điện thoại chịu nhiều thiệt thòi, mua thiết bị mới nhất, nhưng đại đa số các phần mềm lại hoạt động không ổn định, thiếu cập nhật, vì chúng còn phải phục vụ những thiết bị mang phiên bản cũ hơn, chiếm số đông
Việc trên cùng 1 nền tảng tồn tại quá nhiều phiên bản cùng hoạt động sẽ gây lãng phí rất nhiều đến công sức của các nhà phát triển phần mềm Thay vì bỏ công sức tập trung viết cho nền tảng mới nhất, thì họ lại phải loanh quanh đi tìm cách sửa lỗi để phần mềm của mình hoạt động ổn định trên tất cả các phiên bản Và hãy nhìn bức tranh tổng thể để thấy được tính nghiêm trọng của sự việc: Nếu đến tận khi Android ra phiên bản 2.5 2.6 mà bạn vẫn bị "kẹt" ở phiên bản 2.2, đồng nghĩa với việc bạn phải chấp nhận một chiếc smartphone chậm chạp, thiếu tính năng
Google cũng rất dễ dãi trong việc quản lý mã nguồn của mình Sự dễ dãi này khiến việc sản xuất 1 smartphone chạy Android trở nên dễ dàng và cực rẻ nhưng đồng thời
nó cũng làm cho sự phát triển của Android càng lúc càng lung tung Ở một thị trường không trọng điểm như Việt Nam, điều này thể hiện không rõ rệt lắm, nhưng thử nhìn như ở Mỹ, ngoài Android Market còn có đến 3,4 "chợ ứng dụng" khác song song hoạt động Mới đây nhất Amazon cũng cho ra đời "chợ ứng dụng" của mình Sự phân mảng
Trang 24trong cơ cấu phân phối ứng dụng khiến cho người sử dụng gặp nhiều khó khăn Thay
vì tìm mua tất cả những ứng dụng bạn cần ở 1 nơi như cách mà người sử dụng iOS có thể làm Người sử dụng Android có thể sẽ mất rất nhiều công tìm kiếm ứng dụng mà
mình cần
2.5.4 Sự cạnh tranh từ các hệ điều hành khác
Bên cạnh iOS từ Apple cho các thiết bị di động, giờ đây Android cũng đang phải đối mặt sự cạnh tranh đến từ WindowPhone của Microsoft Sự phân mảnh của Android cũng là một trong những lý do khiến các nhà sản xuất thiết bị di động dần chuyển hướng sang các hệ điều hành khác Thách thức này yêu cầu Android phải có sự chuẩn hóa trong sự phát triển tiếp theo, không chỉ chuẩn hóa phần cứng mà phải chuẩn hóa cả phiên bản phát triển sau này để cho nhà sản xuất và người dùng hệ điều hành này có thể tiếp tục sử dụng hiệu quả các thiết bị trên nền tảng Android
2.6 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 mã lệnh cần được chạy 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
2.6.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 hoặc inactive, hoặc là trong trường hợp activies nó có thể visible hoặc invisible
Trang 25Hình 1 3 chu kỳ sống của ứng dụng
2.6.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 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
Hình 1 4 Activity Stack
2.6.3 Các trạng thái của chu kỳ sống
Trang 26Hình 1 5 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
2.6.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 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
2.6.5 Các sự kiện trong chu kỳ sống của ứng dụng
Trang 27Nế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 6 Gọi hàm transition
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
2.6.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()
2.6.7 Thời gian hiển thị của Activity
Visible lifetime 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, có nghĩa là nó không bị foreground hoặc đang tương tác với người dùng Giữa 2 phương thức người dùng có thể duy trì tài nguyên để hiển thị activity đến người dùng
2.6.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, …
Trang 28+ 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
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, 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ếu 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 dỉ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
+ 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
+ Đượ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
Trang 29+ 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()
Trạng thái của activity có thể được giết bởi hệ thống
Trang 30CHƯƠNG II: PHÂN TÍCH XML TRONG ANDROID
1 Tổng quan về XML
1.1 Khái niệm
XML (viết tắt từ tiếng Anh Extensible Markup Language, “Ngôn ngữ Đánh dấu
Mở rộng”) Là ngôn ngữ đánh dấu với mục đích chung do W3C đề nghị, để tạo ra các ngôn ngữ đánh dấu khác Đây là một tập con đơn giản của SGML, có khả năng mô tả nhiều loại dữ liệu khác nhau Mục đích chính của XML là đơn giản hóa việc chia sẻ dữ liệu giữa các hệ thống khác nhau, đặc biệt là các hệ thống được kết nối với Internet Các ngôn ngữ dựa trên XML (thí dụ: RDF, RSS, MathML, XHTML, SVG, và cXML) được định nghĩa theo cách thông thường, cho phép các chương trình sửa đổi và kiểm tra hợp lệ bằng các ngôn ngữ này mà không cần có hiểu biết trước về hình thức của chúng
1.2 Đặc điểm của XML
XML cung cấp một phương tiện dùng văn bản (text) để mô tả thông tin và áp dụng một cấu trúc kiểu cây cho thông tin đó Tại mức căn bản, mọi thông tin đều thể hiện dưới dạng text, chen giữa là các thẻ đánh dấu (markup) với nhiệm vụ ký hiệu sự phân chia thông tin thành một cấu trúc có thứ bậc của các dữ liệu ký tự, các phần tử dùng để chứa dữ liệu, và các thuộc tính của các phần tử đó Về mặt đó, XML tương tự với các biểu thức S (S-expression) của ngôn ngữ lập trình LISP ở chỗ chúng đều mô tả các cấu trúc cây mà trong đó mỗi nút có thể có một danh sách tính chất của riêng mình
Đơn vị cơ sở của XML là các ký tự theo định nghĩa của Universal Character Set (Bộ ký tự toàn cầu) Các ký tự được kết hợp theo các tổ hợp chuỗi hợp lệ để tạo thành một tài liệu XML Tài liệu này gồm một hoặc nhiều thực thể, mỗi thực thể thường là một phần nào đó của các ký tự thuộc tài liệu, được mã hóa dưới dạng một chuỗi các bit
và lưu trữ trong một tệp văn bản (text file)
Sự phổ biến của các phần mềm soạn thảo văn bản (word processor) đã hỗ trợ việc soạn thảo và bảo trì tài liệu XML một cách nhanh chóng Trước XML, có rất ít ngôn ngữ mô tả dữ liệu với các đặc điểm đa năng, thân thiện với giao thức Internet, dễ học và dễ tạo Thực tế, đa số các định dạng trao đổi dữ liệu thời đó đều chuyện dụng,
có tính độc quyền, và có định dạng nhị phân (chuỗi bit thay vì chuỗi ký tự) khó dùng
Trang 31chung giữa các ứng dụng phần mềm khác nhau hay giữa các hệ nền (platform) khác nhau Việc tạo và bảo trì trên các trình soạn thảo thông dụng lại càng khó khăn
Bằng cách cho phép các tên dữ liệu, cấu trúc thứ bậc được phép, và ý nghĩa của các phần tử và thuộc tính có tính chất mở và có thể được định nghĩa bởi một giản đồ tùy biến được, XML cung cấp một cơ sở cú pháp cho việc tạo lập các ngôn ngữ đánh dấu dựa XML theo yêu cầu Cú pháp chung của các ngôn ngữ đó là cố định các tài liệu phải tuân theo các quy tắc chung của XML, bảo đảm rằng tất cả các phần mềm hiểu XML ít ra cũng phải có khả năng đọc (phân tích cú pháp – parse) và hiểu bố cục tương đối của thông tin trong các tài liệu đó Giản đồ chỉ bổ sung một tập các ràng buộc cho các quy tắc cú pháp Các giản đồ thường hạn chế tên của phần tử và thuộc tính và các cấu trúc thứ bậc được phép, ví dụ, chỉ cho phép một phần tử tên ‘ngày sinh’ chứa một phần tử tên ‘ngày’ và một phần tử có tên ‘tháng’, mỗi phần tử phải chứa đúng một ký
tự Đây là điểm khác biệt giữa XML và HTML HTML có một bộ các phần tử và thuộc tính không mềm dẻo, chỉ có một tác dụng và nói chung là không thể dùng cho mục đích khác
XML không hạn chế về việc nó được sử dụng như thế nào Mặc dù XML về cơ bản là dạng text, các phần mềm với chức năng trừu tượng hóa nó thành các định dạng khác giàu thông tin hơn đã nhanh chóng xuất hiện, quá trình trừu tượng hóa này được thực hiện chủ yếu qua việc sử dụng các giản đồ định hướng kiểu dữ liệu (datatype-oriented schema) và khuôn mẫu lập trình hướng đối tượng (mà trong đó, mỗi tài liệu XML được thao tác như là một đối tượng) Những phần mềm như vậy có thể coi XML như là dạng text đã được tuần tự hóa chỉ khi nó cần truyền dữ liệu qua mạng
2 RSS
RSS là một định dạng tập tin thuộc họ XML (ngôn ngữ đánh dấu mở rộng, một chuẩn dùng để mô tả dữ liệu) dùng trong việc chia sẻ tin tức Web (Web syndication) được dùng bởi nhiều website tin tức và nhật ký trực tuyến Chữ viết tắt (theo tiếng Anh) của RSS dùng để chỉ các chuẩn sau:
Rich Site Summary (RSS 0.91)
RDF Site Summary (RSS 0.9 and 1.0)
Really Simple Syndication (RSS 2.0.0)
Trang 32Công nghệ của RSS cho phép người dùng Internet có thể đăng ký nhận thông tin
từ các trang web có cung cấp tính năng RSS (RSS feeds) Chúng thường là các trang
có nội dung thay đổi và được thêm vào thường xuyên
Để có thể dùng công nghệ này, người quản trị trang đó tạo ra hay quản lí một phần mềm chuyên dụng (như một hệ thống quản lí nội dung - content management system-CMS), với định dạng XML mà máy có thể đọc được, có thể biểu diễn các bài tin mới thành một danh sách, với một hoặc hai dòng cho mỗi bài tin và một liên kết đến bài tin đầy đủ đó
Định dạng RSS cung cấp nội dụng web và tóm lược nội dụng web cùng với các liên kết đến phiên bản đầy đủ của nội dung tin đó cùng các siêu-dữ-liệu (meta-data) khác Thông tin này được cung cấp dưới dạng một tập tin XML
RSS hoạt động theo mô hình "xuất bản và đăng ký" (publish and subscribe) Trong đó, những nội dung được xuất bản từ một nguồn có thể được cung cấp qua nhiều kênh theo phương thức đồng bộ hoá (syndicated)
Lợi thế nổi bật của hình thức này là thông tin được đẩy đi liên tục từ nguồn tới các đối tượng người đọc Bản thân nhà cung cấp thông tin cũng không sợ mất bản quyền thông tin vì các tiêu đề trong RSS feed đều liên kết ngược trở lại website xuất phát
Trong khi đó, độc giả cũng thực sự hưởng lợi Họ có thể tiếp cận thông tin theo ý thích xét cả ở ba tiêu chí: ở đâu- khi nào- và như thế nào Độc giả tiết kiệm được không ít thời gian vì RSS feed lưu trữ những đầu mục thông tin ngắn gọn, liên tục được cập nhật
2.1 Những điểm mạnh của RSS
RSS cập nhật thông tin: Ưu việt hơn email, đăng ký một RSS feed, thông tin từ nhà cung cấp sẽ liên tục được cập nhật; bạn không phải vào lại website hoặc đăng ký một RSS feed khác
RSS tiết kiệm về chi phí: Phí chuyền tải và phân phối giảm đáng kể khi dùng RSS Băng thông được giải phóng đáng kể với lượng thông tin truyền tải lớn và không cần nhiều email hay các mã lệnh định dạng cầu kỳ Bản thân trên một website, bạn chỉ cần một khoảng không khiêm tốn để đặt biểu tượng cho RSS feed
Trang 33 RSS tương hỗ với nhiều định dạng: Ngoài những định dạng thông thường như
HTML, ASP RSS còn có tính mở, hỗ trợ nhiều định dạng ngôn ngữ, nhiều thiết bị đầu cuối (máy tính, điện thoại di động, PDA )
RSS độc lập với email: Tuy nhiên, các RSS feed vẫn có thể được "thiết kế" để
nằm ngay trong email của bạn, bổ sung thêm những tính năng mới cho công cụ nhận thông tin điện tử truyền thống
RSS cho phép tổ chức nội dung: Thông tin có thể dễ dàng lưu trữ, phân loại và sắp xếp theo từng chủ đề một cách hoàn toàn tự động
Người nhận RSS hoàn toàn chủ động: Đăng ký và chối bỏ một news feed hoàn
toàn phụ thuộc vào bản thân người dùng
RSS đảm bảo quyền cá nhân: Người đăng ký RSS feed không phải cung cấp
email cho nhà cung cấp thông tin mà nhiều khả năng điểm tới cuối cùng là cơ sở dữ liệu của các công ty chuyên về quảng cáo
RSS có thể tái sử dụng: Thông tin trong RSS hoàn toàn có thể tái sử dụng cho nhiều mục đích: cung cấp cho các kênh thông tin khác (nằm trong feed khác), tích hợp vào các thư viện động hoặc nguyên liệu phục vụ quá trình học tập v.v
RSS an toàn: Xuất phát từ phương thức truyền tải, RSS không thể mang theo virus hoặc trojan như newsletter hoặc các tệp tin đính kèm Trong trường hợp các feed
có mang các đoạn mã độc hại, người sử dụng có thể dễ dàng "phân vùng" và chủ động loại bỏ thông tin
3 Các lớp, giao diện phân tích XML trong Android
Java API for XML Processing, hay JAXP, là một trong các API cho lập trình Java XML Nó cung cấp khả năng kiểm chứng và phân tích các tài liệu XML Hai loại giao diện (interface) để phân tích cơ bản là:
Giao diện phân tích dạng Mô hình đối tượng tài liệu (Document Object Model), viết tắt là DOM
Giao diện phân tích API đơn giản dành cho XML (Simple API for XML) - viết tắt là SAX
StAX, API dẫn luồng cho XML (the Streaming API for XML)
Cùng với các giao diện phân tích, API còn cung cấp một giao diện XSLT để cung cấp việc chuyển đổi dữ liệu và cấu trúc từ một tài liệu XML sang một dạng khác
3.1 Giao diện DOM