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

Đề cương phát triển ứng dụng di động

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 (4.73 MB, 144 trang )

PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

MỤC LỤC
BÀI 1. GIỚI THIỆU VỀ ANDROID VÀ CÀI ĐẶT MÔI TRƯỜNG PHÁT TRIỂN ....4
1.1.

Giới thiệu ...............................................................................................................4

1.2.

Lịch sử phát triển hệ điều hành Android ...............................................................5

1.3.

Kiến trúc hệ điều hành Android ............................................................................7

1.4.

Các thành phần cơ bản của một ứng dụng Android ..............................................9

1.5.

Android Application Lifecycle ............................................................................17

1.6.

Cài đặt Android Studio ........................................................................................17

1.7.

Thiết bị ảo (AVD - Android Virtual Device) ......................................................30



1.8.

Debugging trên Android Studio ..........................................................................34

1.9.

Website hữu ích dành cho người lập trình ..........................................................34

BÀI 2. CHƯƠNG TRÌNH HELLO WORLD ...............................................................35
2.1.

Tạo ứng dụng Android đầu tiên ..........................................................................35

2.2.

Cấu trúc một ứng dụng Android..........................................................................39

2.3.

Chạy ứng dụng trên AVD ...................................................................................41

2.4.

Chạy ứng dụng trên Mobile Phone .....................................................................44

2.5.

Một số phím tắt hữu dụng trong lập trình Android .............................................45


BÀI 3. LÀM VIỆC VỚI LAYOUT ..............................................................................46
3.1.

Giới thiệu về XML ..............................................................................................46

3.1.1.

XML là gì? ............................................................................................................................ 46

3.1.2.

Cú pháp XML ....................................................................................................................... 46

3.2.

Giới thiệu về Layout ............................................................................................47

3.3.

Cách tạo Layout trong một dự án Android .........................................................48

3.4.

Frame Layout ......................................................................................................50

3.5.

Linear Layout ......................................................................................................52

3.6.


Table Layout........................................................................................................53

3.7.

Relative Layout ...................................................................................................57

3.8.

Absolute Layout ..................................................................................................59

BÀI 4: THẢO LUẬN/BÀI TẬP 01: ANDROID LAYOUT ........................................61
1


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

BÀI 5. ACTIVITY VÀ INTENT ..................................................................................61
5.1.

Khái niệm Activity ..............................................................................................61

5.2.

Cách tạo Activity và kết nối với Layout .............................................................62

5.3.

Các kiểu xử lý sự kiện trong Android .................................................................68


5.4.

Truyền dữ liệu giữa các Activity .........................................................................72

BÀI 6. LÀM VIỆC VỚI TOAST, DIALOG VÀ NOTIFICATION ............................77
6.1.

Giới thiệu .............................................................................................................77

6.2.

Toast ....................................................................................................................77

6.3.

Alert Dialog .........................................................................................................78

6.4.

Promt Dialog .......................................................................................................79

BÀI 7. CÁC ĐIỀU KHIỂN CƠ BẢN TRONG ANDROID (1) ...................................82
7.1.

Giới thiệu View ...................................................................................................82

7.2.

Nhóm điều khiển TextView ................................................................................83


7.3.

Nhóm điều khiển Button .....................................................................................84

7.4.

Nhóm điều khiển TextFields ...............................................................................85

7.5.

Điều khiển CheckBox .........................................................................................86

7.6.

Điều khiển RadioButton ......................................................................................90

7.7.

Điều khiển Tab ....................................................................................................95

BÀI 8: THẢO LUẬN/BÀI TẬP 02: CÁC ĐIỀU KHIỂN CƠ BẢN TRONG
ANDROID (1) .............................................................................................................101
BÀI 9. CÁC ĐIỀU KHIỂN CƠ BẢN TRONG ANDROID (2) .................................101
9.1.

Điều khiển TimePicker ......................................................................................101

9.2.

Điều khiển TimePickerDialog ...........................................................................101


9.3.

Điều khiển DatePicker.......................................................................................102

9.4.

Điều khiển DatePickerDialog ............................................................................102

BÀI 10: THỰC HÀNH 01: ỨNG DỤNG HELLO WORLD .....................................103
BÀI 11. SPINNER, LISTVIEW VÀ GRIDVIEW......................................................103
11.1.

Điều khiển Spinner ........................................................................................103

11.2.

Điều khiển ListView ......................................................................................105

11.3.

Điều khiển GridView .....................................................................................108
2


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

BÀI 12: THỰC HÀNH 02: ANDROID LAYOUT ....................................................109
BÀI 13: THẢO LUẬN/BÀI TẬP 03: CÁC ĐIỀU KHIỂN CƠ BẢN TRONG
ANDROID (2) .............................................................................................................109

BÀI 14: THỰC HÀNH 03: CÁC ĐIỀU KHIỂN CƠ BẢN TRONG ANDROID (1) 109
BÀI 15. LÀM VIỆC VỚI MENU ...............................................................................109
15.1.

Option menu...................................................................................................109

15.2.

Context menu .................................................................................................114

BÀI 16: THỰC HÀNH 04: CÁC ĐIỀU KHIỂN CƠ BẢN TRONG ANDROID (2) 120
BÀI 17: THẢO LUẬN/BÀI TẬP 04: CÁC ĐIỀU KHIỂN CƠ BẢN TRONG
ANDROID (2) .............................................................................................................120
BÀI 18: THỰC HÀNH 05: SPINNER, LISTVIEW, GRIDVIEW ............................120
BÀI 19. LẬP TRÌNH CSDL VỚI SQLITE (1)...........................................................120
19.1.

Giới thiệu SQLite ...........................................................................................120

19.1.1.

SQLite là gì? ....................................................................................................................... 120

19.1.2.

Có sử dụng được các câu lện SQL trong SQLite hay không? ............................................. 120

19.1.3.

Có thể sử dụng C# để thao tác với CSDL SQLite hay không? ........................................... 120


19.1.4.

Tạo cơ sở dữ liệu SQLite bằng cách nào? ........................................................................... 121

19.2.

Cách tạo và lưu trữ CSDL SQLite trong một project Android Studio ..........125

19.3.

Các bước làm việc với SQLite trong Android ...............................................127

BÀI 20: THỰC HÀNH 06: LÀM VIỆC VỚI MENU VÀ CONTEXT MENU .........128
BÀI 21: THẢO LUẬN/BÀI TẬP 05: LẬP TRÌNH CSDL VỚI SQLITE .................128
BÀI 22: THỰC HÀNH 07: LẬP TRÌNH CSDL VỚI SQLITE ................................128
BÀI 23. LẬP TRÌNH CSDL VỚI SQLITE (2)...........................................................128
23.1.

Các đối tượng làm việc với CSDL SQLite ....................................................128

23.2.

Thao tác với CSDL SQLite ............................................................................128

BÀI 24: THỰC HÀNH 08: LẬP TRÌNH CSDL VỚI SQLITE (2) ...........................144
BÀI 25: THẢO LUẬN/BÀI TẬP 06: LẬP TRÌNH CSDL VỚI SQLITE (2) ...........144

3



PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

BÀI 1. GIỚI THIỆU VỀ ANDROID VÀ CÀI ĐẶT MÔI TRƯỜNG PHÁT TRIỂN

1.1.

Giới thiệu
Android là một hệ điều hành dựa trên nền tảng Linux được thiết kế dành cho

các thiết bị di động có màn hình cảm ứng như điện thoại thông minh và máy tính bảng.
Ban đầu, Android được phát triển bởi Tổng công ty Android, với sự hỗ trợ tài chính từ
Google và sau này được chính Google mua lại vào năm 2005. Android ra mắt vào năm
2007 cùng với tuyên bố thành lập Liên minh thiết bị cầm tay mở: một hiệp hội gồm
các công ty phần cứng, phần mềm, và viễn thông với mục tiêu đẩy mạnh các tiêu
chuẩn mở cho các thiết bị di động. Chiếc điện thoại đầu tiên chạy Android được bán
vào tháng 10 năm 2008.
Android có mã nguồn mở và Google phát hành mã nguồn theo Giấy phép
Apache. Chính mã nguồn mở cùng với một giấy phép không có nhiều ràng buộc đã
cho phép các nhà phát triển thiết bị, mạng di động và các lập trình viên nhiệt huyết
được điều chỉnh và phân phối Android một cách tự do. Ngoài ra, Android còn có một
cộng đồng lập trình viên đông đảo chuyên viết các ứng dụng để mở rộng chức năng
của thiết bị, bằng một loại ngôn ngữ lập trình Java có sửa đổi.Vào tháng 10 năm 2012,
có khoảng 700.000 ứng dụng trên Android, và số lượt tải ứng dụng từ Google Play,
cửa hàng ứng dụng chính của Android, ước tính khoảng 25 tỷ lượt.
Những yếu tố này đã giúp Android trở thành nền tảng điện thoại thông minh
phổ biến nhất thế giới, vượt qua Symbian vào quý 4 năm 2010, và được các công ty
công nghệ lựa chọn khi họ cần một hệ điều hành không nặng nề, có khả năng tinh
chỉnh, và giá rẻ chạy trên các thiết bịcông nghệ cao thay vì tạo dựng từ đầu. Kết quả là
mặc dù được thiết kế để chạy trên điện thoại và máy tính bảng, Android đã xuất hiện

trênTV, máy chơi game và các thiết bị điện tử khác. Bản chất mở của Android cũng
khích lệ một đội ngũ đông đảo lập trình viên và những người đam mê sử dụng mã
nguồn mở để tạo ra những dự án do cộng đồng quản lý. Những dự án này bổ sung các
tính năng cao cấp cho những người dùng thích tìm tòi hoặc đưa Android vào các thiết
bị ban đầu chạy hệ điều hành khác.
4


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

1.2.

Lịch sử phát triển hệ điều hành Android

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
(đồng sáng lập Tổng công ty Viễn thông Wildfire), Nick Sears (từng là Phó giám đốc
T-Mobile) và Chris White (trưởng thiết kế và giao diện tại WebTV) để phát triển, 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 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 càng nhiều suy đoán rằng Google sẽ tham gia thị trường điện thoại di
động xuất hiện trong tháng 12 năm 2006. Tin tức của BBC và Nhật báo phố Wall chú
thích rằng Google muốn đưa công nghệ tìm kiếm và các ứng dụng của họ vào điện
thoại di động và họ đang nỗ lực làm việc để thực hiện điều này. Các phương tiện
truyền thông truyền thống lẫn online cũng viết về tin đồn rằng Google đang phát triển
một thiết bị cầm tay mang thương hiệu Google. Một vài tờ báo còn nói rằng trong khi
5


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

Google vẫn đang thực hiện những bản mô tả kỹ thuật chi tiết, họ đã trình diễn sản
phẩm mẫu cho các nhà sản xuất điện thoại di động và nhà mạng. Tháng 9 năm 2007,
InformationWeek đăng tải một nghiên cứu của Evalueserve cho biết Google đã nộp
một số đơn xin cấp bằng sáng chế trong lĩnh vực điện thoại di động.
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, Motorola,
Nvidia, Qualcomm, Samsung Electronics, Sprint Nextel và T-Mobile được thành lập
với mục đích phát triển các tiêu chuẩn mở cho thiết bị di động. Cùng ngày, Android
cũng được ra mắt với vai trò là sản phẩm đầu tiên của Liên minh, một nền tảng thiết bị
di động được xây dựng trên nhân Linux phiên bản 2.6. Chiếc điện thoại chạy Android
đầu tiên được bán ra là HTC Dream, phát hành ngày 22 tháng 10 năm 2008. Biểu
trưng của hệ điều hành Android mới là một con rôbốt màu xanh lá cây do hãng thiết kế
Irina Blok tại California vẽ.

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 là 4.2 Jelly Bean (kẹo
dẻo). 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.
Liên minh các thiết bị cầm tay:
Ngày 5 tháng 11 năm 2007, Liên minh thiết bị cầm tay mở rộng (Open Handset
Alliance), một côngxoocxiom 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,
Motorola, Nvidia,Qualcomm, Samsung Electronics, Sprint Nextel và T-Mobile được
thành lập với mục đích phát triển các tiêu chuẩn mở cho thiết bị di động. Cùng với sự
thành lập của OHA, họ cũng giới thiệu sản phẩm Android đầu tiên. Nó là một thiết bị
di động có hệ điều hành dựa trên nhân Linux phiên bản 2.6.

6


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

Ngày 9 tháng 12 năm 2008, thêm 14 thành viên mới gia nhập dự án Android
được công bố, gồm có ARM Holdings, Atheros Communications, Asustek Computer
Inc, Garmin Ltd,Softbank, Sony Ericsson, Toshiba Corp, và Vodafone Group Plc.


Một số phiên bản hệ điều hành Android:

1.3.

Kiến trúc hệ điều hành Android

Kiến trúc Android gồm 4 phần chính, mô hình dưới đây sẽ cho ta cái nhìn tổng
quan về kiến trúc Android. Nhân của Android được phát triển dựa vào Kernel Linux
2.6. Mỗi tầng trong kiến trúc Android hoạt động dựa vào tầng bên dưới nó.

7


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

Kernel Linux layer:
Dựa trên Kernel Linux version 2.6 bởi nó cung cấp các trình điều khiển các
thiết bị phần cứng(driver), quản lý tiến trình, quản lý tài nguyên, bảo mật,... như sau:
-

Security system
Memory management
Process management
Network stack
Driver model.

Libraries:
Là các thư viện được viết bằng ngôn ngữ C/C++ sẽ được các developer phát
triển ứng dụng android thông qua tầng Android Framework. Có thể kể ra đây một số

thư viện quen thuộc với các lập trình viên như:
-

Media Libraries – mở rộng từ PacketVideo’s OpenCORE. Hỗ trợ nhiều định
dạng video và image phổ biến: MPEG4, H.264, MP3, AAC, AMR, JPG, and
PNG.

-

Surface Manager – quản lý việc hiển thị và kết hợp đồ họa 2D và 3D.
LibWebCore – dùng webkit engine cho việc render trình duyệt mặc định của
HDH Android browser và cho dạng web nhúng (như HTML nhúng). Thư
viện đồ họa 2D và 3D.
8


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

-

SQLite – quản lý database của ứng dụng.

Runtime Android:
-

Gồm một tập hợp các thư viện Java Core.

-

Máy ảo Dalvik thực thi các file định dạng .dex (Dalvik Excutable).

Mỗi ứng dụng Android chạy trên tiến trình riêng của máy ảo Dalvik. Dalvik
được viết để chạy nhiều máy ảo cùng một lúc một cách hiệu quả trên cùng một
thiết bị.

Application Framework:
Google xây dựng cho các developer để phát triển các ứng dụng của họ trên
Android chỉ bằng cách gọi các API.
-

View UI - để xây dựng layout của ứng dụng bao gồm: list view, text field,
button, dialog, form …
Content Providers - cho phép các ứng dụng truy cập dữ liệu từ các ứng dụng
khác hoặc để chia sẻ dữ liệu của riêng ứng dụng.
Resource Manager - cung cấp cách thức truy cập đến non-code resources như
các asset, graphic, image, music, video …

-

Notification Manager - cho phép tất cả các ứng dụng hiển thị thông báo của
mình trên hệ điều hành.

-

Activity Manager - quản lý vòng đời của các ứng dụng.

Applications: Là các ứng dụng mà lập trình viên phát triển như Browser, Media...
1.4.

Các thành phần cơ bản của một ứng dụng Android


1.4.1. Activity:
Một activity thể hiện một giao diện đồ họa người dùng. Ví dụ một activity có
thể biểu diễn một danh sách các menu item để người dùng có thể chọn và có thể hiển
thị ảnh cùng với tiêu đề. Một ứng dụng gửi tin nhắn văn bản có thể có một hoạt động
là hiển thị một danh sách các liên hệ để gửi tin nhắn tới, hoạt động thứ hai là viết tin
nhắn tới liên hệ được chọn, các hoạt động khác nữa là xem lại tin nhắn cũ hay thay đổi
cài đặt. Mặc dù chúng làm việc cùng nhau để tạo thành một giao diện người dùng, mỗi
activity độc lập với những cái khác. Mỗi activity là một lớp con của lớp cơ sở Activity.
Một ứng dụng có thể gồm chỉ một activity hay nhiều activity. Thông thường,
một trong số các activity được đánh dấu như là activity đầu tiên phải được trình diễn
tới người dùng khi ứng dụng được khởi động. Chuyển từ một activity sang activity
khác bằng cách cho activity hiện thời khởi động activity kế tiếp.

9


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

Mỗi activity đưa ra một cửa sổ mặc định để hiển thị giao diện. Thông thường,
cửa sổ sẽ lấp đầy màn hình, nhưng nó có thể nhỏ hơn màn hình và nằm trên các cửa sổ
khác. Một activity có thể sử dụng cửa sổ bổ sung - ví dụ như một pop-up dialog gọi
cho một đáp ứng người dùng ở giữa của activity, hay một cửa sổ biểu diễn những cho
người dùng với thông tin quan trọng khi họ chọn một item cụ thể trên màn hình.
Nội dung trực quan của cửa sổ được cung cấp bởi một cây phân cấp các đối
tượng view dẫn xuất từ lớp View. Mỗi view điều khiển một khoảng hình chữ nhật cụ
thể bên trong cửa sổ. View cha chứa và tổ chức bố cục cho các view con. Các view
con vẽ trong hình chữ nhật mà chúng điều khiển và đáp ứng lại các hành động người
dùng trực tiếp ở khoảng trống này. Do đó, các view là nơi mà các tương tác của
activity với người dùng diễn ra. Ví dụ một view có thể hiển thị một hình ảnh nhỏ và
khởi tạo một hoạt động khi người dùng nhấn vào hình ảnh đó. Android có một số view

đã xây dựng sẵn mà bạn có thể sử dụng – gồm có các buttons, text view, editext, scroll
bars, menu items, check boxes …
Lớp cơ sở Activity định nghĩa một loạt các sự kiện mà điều chỉnh vòng đời của
một hoạt động. Class Activity định nghĩa các sự kiện sau đây:
-

onCreate(): Được gọi khi hoạt động được tạo ra lần đầu tiên
onStart(): Được gọi khi hoạt động trở nên hữu hình so với người dùng

-

onResume(): Được gọi khi hoạt động bắt đầu tương tác với người sử dụng
onPause(): Được gọi để dừng các hoạt động hiện tại và nối lại các hoạt động
trước đó

-

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

-

onRestart(): Được gọi khi hệ thống đã được dừng lại và khởi động lại một lần
nữa.

Vòng đời hoạt động của Activity
-

-


Toàn bộ thời gian sống của một activity xảy ra giữa lời gọi
hàm onCreate() và onDestroy(). Activity của bạn nên thực hiện thiết đặt toàn
cục “global setup” như định nghĩa layout trong hàm onCreate(), và trả lại toàn
bộ tài nguyên trong phương thức onDestroy(). Ví dụ, nếu một activity có một
tuyến đang chạy ngầm để download dữ liệu, nó có thể tạo ra tuyến đó trong
phương thức onCreate() và dừng tuyến trong phương thức onDestroy().
Thời gian sống thật (visible lifetime) của một activity xảy ra giữa lời gọi
phương thức onStart() và onStop(). Trong suốt thời gian này, người dùng có
thể nhìn thấy activity trên màn hình và tương tac với chúng.Ví dụ,
10


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

onStop() được gọi khi một activity mới bắt đầu.Giữa hai phương thức này,
bạn có thể quản lý các nguồn tài nguyên cần thiết để hiển thị activity tới
người dùng.Ví dụ, bạn đăng ký một BroadcastReceiver trong onStart() để
giám sát thay đổi tác động tới giao diện của, và hủy đăng ký trong phương
onStop() khi người dùng không thấy giao diện hiển .Activity xuất hiện và ẩn
với người dùng
-

Thời gian chờ foreground lifetime) của một activity xảy ra giữa hai lời
gọi onResume() và onPause(). Trong suốt thời gian này, activity là nền cho
các activity khác trên màn. Một activity có thể thường xuyên chuyển trạng
thái thành trạng thái chờ và hoạt – ví dụ, onPause() được gọi khi thiết bị phần
cứng ở trạng thái ngủ (sleep) hoặc một hộp thoại xuất hiện. Bởi vì trạng thái
này có thể xảy ra thường xuyên nên mã lệnh trong hai phương thức này nên
được viết cẩn thận để tăng tốc độ chuyển giữa các chế độ.


1.4.2. Services:
Một service không có giao diện trực quan, nó chạy trên nền trong một khoảng
thời gian không xác định. Ví dụ một service có thể chơi nhạc nền, hay nó nạp dữ liệu

11


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

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

1.4.3. Content Provider:

12



PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

Content providers quản lý truy cập tới dữ liệu. Chúng đóng gói dữ liệu, và cung
cấp cơ chế cho phép định nghĩa bảo mật dữ liệu. Content providers là giao diện chuẩn
kết nối dữ liệu trong một tiến trình cùng với mã nguồn chạy trong các tiến trình khác.
Khi bạn muốn kết nối tới dữ liệu trong content provider, bạn sử đối tượng
ContentResolver trong ứng dụng Context để giao tiếp với provider như một máy
khách. Đối tượng ContentResolver giao tiếp với đối tượng, một thể hiện của lớp triên
khai từ giao diện ContentProvider. Đối tượng provider nhận dữ liệu yêu cầu từ clients,
xử lý yêu cầu và trả lại kết quả.
Ban không cần phát triển provider của riêng bạn nếu không muốn chia sẻ dữ
liệu với các ứng dụng khác. Tuy nhiên, bạn cần provider của mình để cung cáp những
gợi ý cho tìm kiếm trong ứng dụng của bạn. Bạn luôn cần provider vì nếu bạn muốn
sao chép và dán dữ liệu phức tạp hoặc các tệp từ ứng dụng của bạn sang ứng dụng
khác.
Android tự nó đã bao gồm content providers để quản lý dữ liệu như audio,
video, images, và các thông tin liên hệ của bạn. Bạn có thể nhìn thấy một vài thông tin
được liệt kê bằng cách sử gói android.provider.Các provider này có thể kết nối tới các
ứng dụng Android khác với một số hạn chế nhất đinh.
Một số chủ đề quan trọng của Content Provider:
-

Content Provider Basics: Làm thế nào để truy cập dữ liệu trong một content
provider khi dữ liệu được tổ chức dạng bảng.
Creating a Content Provider: Làm thế nào để tạo content provider của riêng

-


mình.
Calendar Provider: Làm thế nào để truy cập Calendar Provider, là một phần
của Android platform.

-

Contact Provider: Làm thế nào truy cập tới thông tin trong danh sách Contact.

1.4.4. Broadcast Receive:
Một Broadcast Rreceiver là một thành phần không làm gì ngoài việc nhận và
đáp lại các thông báo broadcast. Nhiều broadcast khởi đầu trong mã hệ thống - ví dụ
như thông báo múi giờ thay đổi, pin yếu, ảnh đã được chụp, hay người dùng đã thay
đổi ngôn ngữ … Các ứng dụng có thể tạo ra các broadcast, chẳng hạn để ứng dụng
khác biết được một số dữ liệu đã được tải về thiết bị và sẵn sàng cho việc sử dụng
chúng.

13


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

Một ứng dụng có thể có một số Broadcast Receiver để đáp lại bất cứ thông báo
nào mà nó cho là quan trọng. Tất cả các receiver mở rộng từ lớp cơ sở
BroadcastReceiver.
Broadcast Receiver không hiển thị một giao diện người dùng. Tuy nhiên chúng
có thể bắt đầu một activity để đáp lại thông tin mà chúng nhận, hay chúng có thể sử
dụng NotificationManager để cảnh báo người dùng. Notifications có thể lấy sự chú ý
của người dùng bằng nhiều cách như lóe sáng đèn sau, rung, tạo ra âm thanh,.... Chúng
thường tạo một biểu tượng trong thanh trạng thái, nhờ đó người dùng có thể mở để lấy
thông điệp.

1.4.5. Intents và Intent filter:
Ba thành phần cơ bản của một ứng dụng activities, services, and broadcast
receivers các thành phần này được kích hoạt thông qua các thông điệp được gọi
là intents. Thông điệp Intent là cơ sở cho việc truy xuất giữa các thành phần trong một
hoặc các ứng dụng khác nhau. Một đối tượng Intent là một cấu trúc dữ liệu bị động giữ
một mô tả trừu tượng của một hành động thực thi. Có một vài cơ chế cho việc gửi
intent tới từng thành phần:
đối

tượng

Intent

được

-

Một

thông

qua Context.startActivity()

-

hoặc Activity.startActivityForResult() để khởi động một activity hoặc lấy một
activity đã tồn tại để làm một việc gì đó. (Cũng có thể sử
dụng Activity.setResult() để trả thông tin tới activity được gọi bằng phương
thức startActivityForResult().)
Một đối tượng Intent được sử dụng thông qua phương

thức Context.startService() để khởi tạo một service hoặc gửi một yêu cầu
mới tới một service khác. Tương tự, một intent có thể được gửi thông qua

-

phương thức Context.bindService() để tạo một kết nối giữa các thành phần
đang gọi và một service.
Đối
tượng
Intent
được
gửi
tới
các
phương
thức
(như Context.sendBroadcast(),Context.sendOrderedBroadcast(),
hoặc Context.sendStickyBroadcast()) được gửi tới toàn bộ các service đang
lắng nghe.

Trong mỗi trường hợp, Android tìm các activity, service phù hợp hoặc thiết đặt
broadcast receivers để trả lời tới intent, khởi tạo chúng nếu cần.
Broadcast intents chỉ được gửi tới broadcast receivers, không bao giờ tới
activities hoặc services. Một intent thông qua phương thức startActivity() chỉ được
gửi tới một activity, không bao giờ tới một service hoặc broadcast receiver.
14


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG


To inform the system which implicit intents they can handle, activities,
services, and broadcast receivers can have one or more intent filters. Each filter
describes a capability of the component, a set of intents that the component is willing
to receive. It, in effect, filters in intents of a desired type, while filtering out unwanted
intents — but only unwanted implicit intents (those that don't name a target class). An
explicit intent is always delivered to its target, no matter what it contains; the filter is
not consulted. But an implicit intent is delivered to a component only if it can pass
through one of the component's filters.
Để thông báo cho hệ thống ngầm ý đồ mà họ có thể xử lý, activity, service,
broadcast receivers có thể có một hoặc nhiều bộ lọc. Mỗi bộ lọc mô tả một khả năng
của các thành phần, một tập hợp các intent mà thành phần đó là sẵn sàng nhận. , Các
bộ lọc các loại intents mong muốn, trong khi lọc sẽ loại bỏ những intent

1.4.6. Process và Thread:
Process: Mỗi ứng dụng là một tiến trình có tài nguyên và không gian bộ nhớ riêng.
Trong một tiến trình có thể có một hoặc nhiều tuyến.
Thread: Thông thường dùng Thread để xử lý các code xử lý nặng, hoặc mất thời gian
có thể gây chậm chương trình hoặc giao diện bị block.
Thread khá thông dụng và trong Android dùng lớp Thread của Java.
Mặc định, mỗi ứng dụng chạy trong một process và code được thực thi trong thread
chính của process đó.
Nếu code xử lý quá lâu, không kịp phản hồi lại các sự kiện người dùng trong 5
giây thì sẽ xuất hiện dialog “Application is not responding” và người dùng có thể force
close ứng dụng ngay lập tức.
Dù không bị đóng ứng dụng thì việc ứng dụng bị chậm là khó chấp nhận.
Code minh họa triển khai một Thread:

15



PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

Thread thread = new Thread() {
@Override
public synchronized void start() {
// Khởi tạo các đối tượng cần thiết tại đây
super.start();
}
@Override
public void run() {
// code xử lý chính của thread trong này
super.run();
}
};
thread.start(); //bắt đầu thread

16


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

1.5.

Android Application Lifecycle

1.6.

Cài đặt Android Studio

1.6.1. Chuẩn bị các công cụ để cài đặt môi trường phát triển (lập trình)

Có nhiều công cụ để tạo ra một sản phẩm Android. Vấn đề là bạn chọn công cụ
nào?
- Sử dụng Visual Studio (với ngôn ngữ C# mà bạn quen thuộc)
- Sử dụng Eclipse (Sử dụng ngôn ngữ Java)
- Sử dụng Android Studio (Sử dụng ngôn ngữ Java)
Trong khuôn khổ của môn học thì các bài học và demo sẽ được thực hiện trên
Android Studio. Tuy nhiên có thể một số máy cấu hình không mạnh chạy Eclipse hay
ADT sẽ phù hợp hơn là Android Studio vì vậy trong bài học này mình sẽ hướng dẫn
nhanh cài đặt Eclipse hay ADT. Còn để cài đặt công cụ lập trình Android trên Visual
Studio các bạn chỉ cần Google với từ khóa: "lập trình android trên visual studio" là
xong ☺

17


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

1.6.2. Cài đặt Android Studio
Trước hết download bộ cài đầy đủ Android Studio tại link (không phân biệt OS 32 hay
64 bit): />
Sau khi tải về thành công, bạn chạy tập tin android-studio-bundle, hộp thoại Welcome
to Setup Android Studio sẽ xuất hiện:

18


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

Nhấn Next để tiếp tục. Nếu hệ thống không phát hiện ra JDK trong máy tính
của bạn, một hộp thoại yêu cầu chỉ rõ đường dẫn hoặc cài đặt JDK xuất hiện.


Nếu đã có JDK, bạn vui lòng trỏ đường dẫn đến nơi cài đặt. Sau đó nhấn Next.
Chưa có hãy nhấn vào link xanh và download về. Hộp thoại lựa chọn cấu hình cài đặt
sẽ mở ra

Bạn vui lòng check như hình trên để tránh thiếu sót về sau. Sau đó nhấn Next
để tiếp tục. Hộp loại thông báo các điều khoản và một số lưu ý khi sử dụng Android
Studio xuất hiện
19


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

Nhấn I Agree để tiếp tục. Hộp thoại yêu cầu chọn nơi cài đặt Android Studio và
Android SDK xuất hiện.

Bạn nên để đường dẫn mặc định như trên, sau đó nhấn Next để tiếp tục quá
trình cài đặt. Hộp thoại chọn Start Menu xuất hiện, chọn Android Studio và nhấn vào
Installl để tiếp tục quá trình cài đặt
20


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

Chờ đợi quá trình cài đặt

Khi quá trình cài đặt hoàn tất, nhấn Next để tiếp tục.

21



PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

Hộp thoại cuối cùng của quá trình cài đặt xuất hiện

Nhấn check vào Start Android Studio, và Finish.
Trong quá trình khởi động, nếu có thông báo thiếu JDK, bạn vui lòng cài JDK 7
bản x64 và khởi động lại Android Studio.

22


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

Ở lần khởi động đầu tiên, một hộp thoại import bản Android Studio cũ xuất
hiện, nếu bạn cài đặt mới, vui lòng chọn như hình dưới.

Nhấn OK và tiếp tục. Ở lần đầu tiên, bạn sẽ phải update một vài thứ cho quá
trình làm việc sau này. Vui lòng chờ đợi cho đến khi hoàn tất.

Đợi một lúc và nhấn tiếp Finish. Quá trình download file bắt đầu.

23


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

Khi hoàn tất quá trình download, nhấn Finish để kết thúc. Vậy là bạn đã hoàn
thành quá trình cái đặt
Khi cài đặt thành công Android Studio thì Android Studio tạo sẵn chúng cho

chúng ta máy ảo rồi. Bạn có thể khởi động máy ảo này ngay hoặc chỉnh sửa lại thông
số trước khi chạy máy ảo. Tuy nhiên nếu máy ảo không chạy được và báo lỗi hoặc khi
chạy một ứng dụng Android Studio báo lỗi:

Điều này có nghĩa máy tính của bạn chưa bật tính năng hỗ trợ chạy máy ảo
Android. Để khắc phục cần làm như sau:
24


PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG

Bạn mở Android SDK Manager lên - theo như đường dẫn ở đầu bài là:
D:\Android\sdk, tìm

tới

folder

extras\intel\Hardware_Accelerated_Execution_Manager
Sau đó chọn cài đặt file intelhaxm-android.exe.

Nếu hộp thoại sau xuất hiện:

Điều này có nghĩa máy tính của bạn đang bị xung đột giữa các công nghệ ảo
hóa với nhau, mà trong trường hợp này là Hyper-V của Microsoft. Để tắt Hyper-V,

25



×