Giáo trình Lập trình Android: Phần 1 - Lê Hoàng Sơn (Chủ biên) cung cấp cho học viên các kiến thức về tổng quan về lập trình Android, cài đặt môi trường phát triển với Android SDK, xây dựng ứng dụng Hello Word, nền tảng lập trình hướng đối tượng; thiết kế Layouts và UI, xây dựng Layout qua XML, Graphic resources;... Mời các bạn cùng tham khảo chi tiết nội dung giáo trình!
Trang 1Rod ấ +
GIÁO TRÌNH LẬP TRÌNH
Trang 2LE HOANG SON (chi bién) - NGUYEN THO THONG
GIAO TRINH LAP TRINH
Trang 4LOI NOI DAU
Ngày nay các thiết bị số cầm tay như điện thoại di động, điện thoại thông mình, máy tính bảng có rất nhiều trên thị trường Với giá thành ngày càng
rẻ và các lợi ích đem lại, các thiết bị đó ngày càng duoc su dung nhiéu va
pho biến Một nên tảng được sử dụng trong cdc thiết bị đó là hệ điều hành
thông mình Android của Google Sự ra đời của Android đã mang lại một giải pháp mở, không bị hạn chế, các lập trình viên Android tự do viết các ứng dụng tận dụng tối đa sự phát triển mạnh mẽ của phan cứng cho điện thoại di động Android nhanh chóng trở thành hệ điều hành thu hút nhiều lập trình viên và chiếm một thị phân lớn trong thị trường di động Do vậy,
đi cùng việc phát triển và sử dụng các thiết bị phân cứng một cách hiệu quả
thì việc phát triển các ứng dụng phân mêm chạy trên nền Android càng lúc càng tăng cao
Mục tiêu chính của cuốn sách này là giúp bạn đọc nhanh chóng nắm bắt được các thành phẩn cốt yếu trong Android và có thể lập trình được các ứng dụng cơ bản một cách hiệu quả Đây cũng sẽ là cuốn giáo trình hữu ích
cho sinh viên các trường đại học kỹ thuật chuyên về công nghệ thông tin Đề
có thể đọc một cách hiệu quả nội dung của cuốn sách này, bạn đọc cần nắm
được các kiến thức nền tảng về lập trình hướng đối tượng trong Java Trong mỗi chương, chúng tôi cũng trình bày các đoạn mã nguon day di dé ban
đọc tiện theo dõi và thực hành Nội dung cua cuốn sách gom 6 chuong
Chương 1 giới thiệu tổng quan về lập trình Android bao gỗm môi trường lập trình là bộ công cụ Android SDK, nền tảng phát triển, cơ bản về lập trình hướng đối tượng, các lưu ý khi phát triển ứng dụng cho Android và
vòng đời của phần mêm di động Cách thức xây dựng một ví dụ cơ bản là
Hello World cũng sẽ được trình bày trong chương này
Chương 2 mô tả kỹ lưỡng cách thiết kế giao dién gom layouts va UI cho ứng dụng Android thông qua ngôn ngữ đặc ta XML Giao điện là thành phân thiết yếu và sống còn của bắt kỳ ứng dụng di động nào nên trong chương này, chúng tôi sẽ trình bày kỹ lưỡng cách thức tạo các thành phân giao điện cơ bản và nâng cao bằng ngôn ngữ XMI
Trang 5
Chương 3 trình bày ba yếu tố cơ bản của lập trình di động là: tương tác
sự kiện, content provider va intent filter Trong mét ung dung di déng, viéc tương tác giữa người dùng và điện thoại thông mình có sự khác biệt lớn so với các tương tác trên máy tính Do vậy phẩn đâu chương sẽ mô tả các tương tác sự kiện cơ bản như nhấn, nhấn và giữ, v.v cùng với các hàm xử by tương ứng Trong phân thứ hai, chúng tôi sẽ giải thích làm thế nào để ứng dụng Android có thể kết nối đến cơ sở đữ liệu thông qua content provider Cuối cùng, một ứng dụng Android lớn gồm rất nhiều màn hình liên kết với
nhau và việc liên kết đó được thực hiện thông qua các khái niém nhw intent
Khi viết chúng tôi đã hết sức cố gắng để cuốn sách được hoàn chỉnh, tuy nhiên chắc chắn không thể tránh khỏi thiếu sót, vì vay rat mong nhận được sóp ý của độc giả Mọi góp ý xin gửi về địa chỉ email: sonlh@vnu.edu.vn
Tran trong cam on
Nhom tac gia
Trang 6Chuong 1
TONG QUAN VE LAP TRINH ANDROID
I CAI DAT MOI TRUONG PHAT TRIEN VOI ANDROID SDK
Android là một hệ diéu hanh duoc phat trién dua trén nén tang nhan Linux va
Oracle Java danh 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 Năm 2005, Android được Google mua lại Trong thời gian
qua, Android đã trưởng thành và phát triển một cách nhanh chóng và trở thành hệ
điều hành cho thiết bị di động hàng đầu hiện nay Phiên bản mới nhất của hệ điều
hành Android là 4.4 Để thực hiện lập trình ứng dụng Android, chúng ta cần cài đặt
các øói sau:
- Java SE và JRE
- Eclipse IDE: Galileo (Version 3.5) hoặc Helios (Version 3.6)
- Bộ Android Tool Kit cho Eclipse
Trong phần sau đây, chúng tôi sẽ giới thiệu cách cài đặt của các gói trên Nếu
máy bạn đã cài đặt gói nào thì có thể bỏ qua cách cài đặt của gói đó
a) Cai dat Java SE va JRE
- Tải bộ cài đặt JDK mới nhất từ trang chủ của Oracle theo link bên dưới Bản
JDK được sử dụng hiện tai 1a jdk-6u24-windows i586.exe Viéc cài đặt bao gồm
cả cài đặt Java Runtime Environment (TRE) là môi trường để các chương trình
Java như Eclipse chạy
hữlp: /www.oracle.corn/technetworkJava/Javase/ downloads /index.html
- Nhấp đúp chuột vào bộ cài IDK vừa tải về dé bắt đầu cài đặt
- Hộp thoại thỏa thuận pháp lý xuất hiện, hỏi có đồng ý với các điều khoản sử
dụng phần mềm Java của Oracle Đọc và sau đó chọn Accept đề tiếp tục cài đặt
- Hộp thoại tiếp theo sẽ cho biết tập tin và tính năng nào sẽ được cài đặt và cho
phép tắt các tính năng mà không uốn Chúng ta sẽ không thay đổi bất cứ điều
gì trong hộp thoại này, vì vậy chỉ cần nhấn Next để sao chép các tập tin 300MB
vào ổ cứng của máy, như thê hiện trong hình 1.1
Trang 7
a Instaling
The prodr an festtures wou selected are belng instaled, $ Sun
Status: Ceaying sew files
t
Hinh 1.1: Tién trinh cai dat JDK
Sau khi cài đặt JDK, tiếp tục cài đặt JRE, thông thường là vào thư mục
%C:/ProgramFiles/Java/jre6” Việc cài JRE chỉ đơn giản là chon Next va chấp nhận các thiết lập mặc định
b) Cài đặt Eclipse IDE
Sau khi cài đặt JDK, JRE thành công, thực hiện cài đặt Eclipse Galileo (Version 3.5) hoặc Helios (Version 3.6), đây là các môi trường lập trình tích hợp (Integrated Development Environment - IDE) hỗ trợ việc phát triển các dự án Android Các bước cải như sau:
- Tải bộ cài Eclipse ttr trang chu: (Attp:/Avww.eclipse.org/downloads/) thanh tap
tin nén Eclipse.zip Việc cài đặt Eclipse được thực hiện dễ hơn so với việc cai đặt Java Nhấp đúp chuột vào tập tin Eclipse Galileo hoặc Helios.zip để mở chương trình giải nén WinZip như hình 1.2
‘Encrypt View CheckOut Wizard
Modified Swe Ratio Packed (a
3 M20100211-1343 File 2/18/2010 11:34 AM 2848 1% 28333 75]
fR.22_V20L00108-7RB 2/19/2010 11:34 AM 8,076 1% 8,019 RISK_V2O1L00119-9SA 2/19/2010 11:34 AM 47.687 1% 47,397
es RISK_VZOLOOIZS-7E7 2/18/2010 11:34 AM 8,076 1% 8,010 z3 org echose platform _root_3.5.2.RISx_vZ0100210- RISX_V20100Z10-060 2/18/2010 11:33 AM 47,687 1% 47,397
*- artfacts.xvẺ XML Document 2/16/2010 11:34 AM 2234 71% 644
Borg ecipse.equinox.p2 artifact repostory prefs PREFS File 2/18/2010 11:36 AM 27,107 92% 2,210
Bora.eciose.equinox.p2.metadata.reposkory.prefs PREFS File 2/18/2010 11:36 AM 18,116 91% 1,634
8 org.eclose equinox.p2.artifact.repostory.prefs PREFS Fite: 2/18/2010 11:35 AM 1540 79% 390
org.eckpse squinox.p2.metadata.repository.prefs PREFS File 2/18/2010 11:35 AM 1,540 79% 380
2} yemargs File 2/18/2010 11:35 AM S8 7% s4
ÂM Jock LOCK Fle 2/19/2010 11:32 AM 0 0% 0
53 1266510768602 profile PROFILE File 2/16/2010 11:32 AM 788 61% 306
at 126651096391 7.profile PROFILE File 2/18/2010 11:36 AM 1,753,799 93% 127,158
a 1266510957872 profile PROFILE File 2/19/2010 11:35 AM 1,753,800 93% 127,163
SỈ 1266510768343.profile PROFILE File 2/16/2010 11;32 AM TT 62% 302
‘Snotice.hemi HITML Document 3/17/2005 $:12 PM 6,505 64% 2,328
at ecipseproduct ECLIPSEPROOUCT Fie 12/10/2008 S:0S PM so 15% so
Trang 8- Nhấp chuột vào Extract và chọn đường dẫn tới nơi chứa tập tin giải nén:
C\eclipse như hình 1.3:
> {43 ® Œì g3 Ø œ@ &w
New ‘Open Favortes Aad Extract Encrypt Veowe ChedOut = Wizard
Nome Type Modfied Sze Ratio Packed ES
org.eckose.rcp.corfigur ion, root.kin32.w4n32.x8 M2O100211-143 Fle 2/18/201011:34AM 29,484 1% 28,333 5U
raver) 3 BM (E-) Removable Disk 330
Ivmarg tò 42 SQ My Network Places “
tock Fy Documents © Downloads 0 12665) # & Tradeshow 306
12665; @ ©) My Documents 127,156
12665: ys © LAN Admin Setup [delete when done) 127,163
Na đo (Open Explorer vrindow 2,225
ede ak ee Te Clovermite existing flex so
O Fier,
My Network - [Use folder names
Hinh 1.3: Gidi nén tap tin Eclipse Galileo
- Mé Windows Explorer va vao thư mục “C:\eclipse” sẽ thấy cấu trúc các tập tin
của Eclipse Nhấp đúp chuột vào tập tin eclipse.exe để khởi động chương trình
Eclipse
c) Cai dat Android Tool Kit
- Tải bộ cài Android SDK ti trang chu của Android: http://developer
android.com/sdk/index.html duge tap tin android-sdk_r10-windows.zip Tuong
tu nhu viéc cai dat Eclipse, chi can giải nén tập tin vừa tải vào ổ CA được thư
aoe Text Document 8/30/2016 12:25 Pm
SEER Osh rates len yeu sate ee
(4) corm ý te SQ My Network Places:
~aol £3 Dowmloade tog MYO Fa B Tradeshow
(al) de: My Documents
ta} & © LAN Admin Setup (delete when done}
Assad aoesdt Eo, St Fin Weta open Erphorer window :
E «3 GA in) Dlovermte aristing Hes
Trang 9Cài đặt công cụ phát trién Android cho Eclipse (ADT):
- Mở Eclipse và lựa chọn đường dẫn làm việc mặc định
- Từ màn hình chính của Eclipse, chọn menu Help — Install New Software nhu
Hinh 1.5: Cai dat tinh nang mdi cho Eclipse
- Xuất hiện một hộp thoại, chọn nút Add như hình 1.6 Ở đây, hộp thoại Add Site
sẽ xuất hiện, nhập Android Plug-In vào trường Name Trong trường Location nhập một trong hai link bên đưới, rồi chọn nút OK
| Select 4 ste or enter the location of « ste # i
Work wth: type or select @ che
@ There is ro ste selected
fame; AnoodPkoin ‘Location: | hetps:fdb-est gaol corn/andscidjechove!
Datsbc
Dshow only = -~ _ˆ
EÌexe sene by cateqory Wee te smacte Tnatsäe2 i
Fl contact of undete stax durn instal to find required softwere: i tocat Type
Trang 10- Sau khi thêm tùy chọn Android Plug-In, cau trac Developer Tools hiện ra trong
hộp thoại cài đặt như hình 1.7 Chọn nút Next đề tiếp tục
Work with: Android Phug-In - nups://d-s81.00n0.coniardrodiedoral gC
Find more softyeare by veorking with the ‘Available S0f% cua 2307”
Nene ‘Version
Ge FES Developer Tonk
EAD Andred Deers 0 3.x201003221407-60953 ASS Andra Development Toc 0.9.%20120/4321407-40952
Cotas
Cte Roms that are atroady instated
[Elsie teracby cotepeey: "hot plonadt installed?
Locate Tepe
FA contact a8 uodate stes during inetall to find required softwere,
TZ lshow only the latest versions of avalable software
h" J4
Hình 1.7: Tùy chọn cài đặt Android Plug-In
- Bước tiếp theo sẽ hiện hiện ra bộ công cụ lập trình Android Development Tools
và bộ gỡ lỗi Android Dalvik Debug Monitor Server như hình 1.8 Chọn Next để
tiếp tục
- Chấp nhận các điều khoản sử dụng Accept Terms of License Agreement va
chon nut Finish dé cài đặt Chọn Yes khi hộp thoại xuất hiện yêu cầu khởi động
Aa cutie te ret avaiable
i i J), xthertocty oF vabdty of this softwere cannot ba extabished 0 YOU want to Warring Yau are inating software that conteins unsloned contont, The So tên te netAld0or? : “ứi ‡
Trang 11- Khdi dong Eclipse, vao menu Window — Preferences, xuất hiện hộp thoại Preferences chọn nút Android ở bên trái, chọn tùy chọn Android Preferences Trên hộp thoại Preferences, sử dụng nút Browse để trỏ đến đường dẫn chứa thư
pons: Me: The Ist of SOK Targets below i anty reloaded once you hit ‘Angty’ oF "Ox",
hơi teeth vente đồ consect 2n
‘Cycemit te your tie ard ALM bods,
- Trên cửa số Eclipse, vào menu Window —> Android SDK and AVD Manager
(hình 1.10) Trên cửa số Android SDK and AVD Manager, chọn Available
Packages để hiển thị các gói sẵn sàng cho việc cập nhật, chọn các gói có sẵn rồi
chọn nút Install Selected để cài đặt
Ue ever + AGE Mavtekticende paceon, teen 1
Trang 12- Chú ý cần đảm bảo các thanh phan packages, documentation, APIs, USB drivers
đều được chọn Sẽ cĩ hộp thoại yêu cầu chấp nhận điều kiện sử dụng khi cài đặt
các gĩi, chọn Accept rồi chọn nút Install dé tiép tuc cài đặt (hình 1.11):
+ ILS Sancies fer SX ABET, eosin 5 2
& [2] & Google Abts by Goode Ine,, Aretrord AP 8, reveron 2 >on
& (2% Soegle Arts by Googe tre deve a2? 7, yewaen |
* TC] Geogle APs br Goode Ine, #vvkc#2 A77 9, teZeo £
& Gab Gover pneleoe, tư 3
x_ Ej Bế Mettet Leecsng 2axl-sợc, test, 3
T9y/9g/0%
SO 5eu.e: Hot: (lế sở Quo4s.cơelsrdrcellrepeslcrvirepe4Wory.anf 9 packages found
(adnate sang] ooo Eloswkreseeseelr (heheh][Ðedreeaes) |
ÍỀ mobees TT (2 Aessdbc (9G Decoration
LEP RE NDE EIN ONE IOS ERODE AIT ETL 4g 3]
Fad-sys2eccrerv2a Srbccevree
OS USB Onteae For Wines, rexision 2 Pmkeoebracrmlem & ˆ
L1 ate ome
se Samples tue S00 APE 7, revision 1 3A1: 82s EbYSCSB7DV đĩ26 3 Xà42atz4031236409
Y Grae APIS by Goin Đac., Andrdd ÁP) 6, _
~ Seo APs by Googe bx: | Anant API 7, Sera Anus SA Development ne teen Ag cgoerE
———— bn | Andra 0 4
~ Goode APIS by Googe HK., herder APTI, aoe
Ue Crhve patho, essen 3 1.1 The Archos Seftmare Orelagrant 1k (rofenred is 1th corse 2
2 42223D3 2e co Brame RATA Nye trước Pose serve stom He
5 =2 CAsekpk vã
=
Hình 1.11: Hộp thoại yêu cẩu chấp nhận điều kiện sử dụng
- Việc cài đặt chiếm mất khá nhiều thời gian (trung bình khoảng 60 phút) tùy
thuộc vào tơc độ mạng Cuơi cùng sau khi đã cài đặt xong, chọn nút OK đê khởi động lại Android Debug Bridge
Thiết lập máy ảo mơ phỏng điện thoại thơng minh AVDs (hình 1.12)
- Trên cửa số Eclipse, vào menu Window —> Android SDK and AVD Manager
- Trên cửa số Android SDK and AVD Manager, chọn Virtual Devices, chọn nút
New để tạo một máy ảo
- Trên hộp thoại Create new Android Virtual Device (AVD), cần điền các thơng
số cho máy ảo rồi chọn nút Create AVD để tạo mới máy ảo:
+Name: Tên máy ảo
+ Target: Phiên bản của máy ảo
+ Memory: Kích thước bộ nhớ trong
+ SD Card/Size: Kích thước thẻ nhớ
11
Trang 13- Trên cửa số Android SDK and AVD Manager, cĩ thê thấy danh
vừa tạo, chọn một máy ảo rồi chọn nút Start để khởi động máy ảo
@ wad Be O-Q- 2đ @Y ®ởz vyy T: 82 »«
¬ .= WES AEE Teese List
~ x
¬
8 PÀÍ Street
Aseidie Pa AD Nerve Target Meme LG
fore ere _— F >⁄Ì @ Danoect *vyn §
| awe: ernest to yous task ard it toc, Tượp Andodi©-APltevel3 & Sate
| Dod : An eatin trot avaiable
Hình 1.12: Tạo mới máy ảo Android
II GIOI THIEU NEN TANG PHAT TRIEN ANDROID
Cấu trúc thư mục của một dự án Android bao gồm tệp mã Java, layo ut XML, các định nghĩa hiệu ứng XML và các tệp đa phương tiện mà tệp Java và tệp XML tham
chiếu tới Như hình 1.13, thư mục “/res” chứa tài nguyên gồm các thư mục mặc định
được tạo trong một dự án Android chứa các menu, hình ảnh, layout, màu sắc, các dữ liệu được định nghĩa trước, đữ liệu thơ, câu trúc XML và các hiệu ứng Các tệp chứa
mã Java được đặt trong thư mục “/src” và các thư mục con tùy theo định nghĩa của người phát trin
Các thư mục con của thư mục tài nguyên mặc định /res:
- layouf: chữa các tệp XML định nghĩa giao diện cho ứng dụng
- anim: chứa các tệp XML định nghĩa các hiệu ứng
- drawabie: chứa các hình ảnh định dạng PNG (được Google khuyên dùng) hoặc định dạng JPEG
- vaÏ/es: chứa các tệp XML định nghĩa các giá trị hằng số
- color: chứa các tệp XML định nghĩa giá trị màu sắc cho giao diện của ứng dụng 12
Trang 14- xml: chứa các tệp XML chứa dữ liệu tùy ý có cấu trúc
- menu: chita các tệp XML định nghĩa menu layout cho ứng dụng
- raw: chứa các tệp video
- values: Chita một số tập tin XML định nghĩa các giá trị hằng số:
+ colors.xmi: chứa định nghĩa các giá trị màu sắc cho ứng dụng:
+ đimens.xmi: chứa định nghĩa các giá trị kích thước cho ứng dung;
+ arrays.xmÏ: chứa mảng các giá trị được dùng trong ứng dung;
+ s/rings.xmi: chứa các chuỗi văn bản được đùng trong ứng dụng:
+ sfyles.xmi: chứa định nghĩa các style được dùng trong ứng dụng
¿_ AndrordProject
Folders
enim color drawable
- layout menu raw values
xm
de sre
Ay aodroid-sdk-windows ~ } B items
Hình 1.13: Cấu trúc thư mục một dự án Android
Date modified Type
"- 10/6/2010 1043 PM = XML File
La Colors xcat 10/6/2010 10:44 PM XML File dimens.xrnt 10/6/2010 10:45 PKA XML File
— ` 10/6/2010 1045 PRA XML File stylesxml 10/6/2020 1045 PMA XML File
Trang 15Il XAY DUNG UNG DUNG HELLO WORLD
Trong phan nay chúng ta sẽ xây dựng ứng dụng Android đầu tiên là in ra màn hình đoạn văn bản “Hello Android World, Here I Come!” Các bước thực hiện như sau:
- Khởi động Eclipse Trên cửa số của Eclipse, chọn menu File —> New —> Project, trên hộp thoại New Project chon Android Application Profject, rồi chọn Next để tạo một project Android (hình 1.15)
{GS Android Application Project’
GS Android Project from Existing Code
&S Android Sample Project
Je Android Test Project
Hình 1.15: Hộp thoại tạo mới project
- Hộp thoại New Android Application sẽ xuất hiện, cần điền các thông số cần
thiết như ở hình 1.16 rồi chọn nút Next
+ Application Name: Tén ứng dụng
+ Project Name: Tén du 4n
+ Package Name: Tén gói
+ Minimum Required SDK: Phiên bản Android nhỏ nhất có thể chạy ứng dụng
+ Target SDK: Phién ban Android chay tmg dung
+ Compile With: Phiên bản Android được sử dụng để dịch cho ứng dụng
+ Theme: Giao diện chung cho ứng dụng
14
Trang 16New Android Application
4#: The prefix ‘com.example.' is meant as a placeholder and should not be used
Application Name:® HelloWorldAndroid
Project Name:® HelloWorldAndroid Package Name: com.example.helloworldandroid
g Choose the base theme to use for the application
Hình 1.16: Hộp thoại New Android Application
- Hộp thoại tiếp theo cho phép thiết lập các thông số cho dự án như đường dẫn
chứa dự án, tạo biêu tượng cho ứng dụng (hình 1.17) Chọn nút Next để tiếp tục
New Android Application
New Android Application
Configure Project
[Ở] Create custoơm launcher icon
Create activity
[2] Mark this project as a library
(P] Create Project in Workspace
Trang 17- Hộp thoại tiếp theo cho phép thiết lập biểu tượng cho ứng dụng (hình 1.18)
Chon nut Next dé tiếp tục
XỔ New Android Application
Configure Launcher Icon
Configure the attributes of the icon set
Foreground: [Image]| Clipart || Tet or
Image File: launcher_icon ie
| {¥ Trim Surreunding Blank Space =1
|
|| Foreground Scaling: ESi==
; Shape [None]| Square || Circle
Hình 1.18: Tùy chọn biểu tượng cho ứng dụng
- Hộp thoại tiếp theo cho phép tạo lớp Java Activity cho tng dung Lop
Java Activity chịu trách nhiệm điều khiển giao diện người dùng của ứng dụng
Trang 18- Hộp thoại tiếp cho phép thiết lập các thông số cho lene Java Activity (hinh 1.20),
chọn Einish để kết thúc
+ Activity Name: Tén của lớp ]ava Activity;
+ Layout Name: Tên layout cho lớp Java Activity;
+ Navigation Type: Loại giao diện cho layout
©) New Android Apptication `
/ Blank Activity
1 Creates a new blank activity, with an action bar and optional navigational elements such as tabs or
| horizontal swipe,
Activity Name® MoinAciity
Layout Name® activity_main
Navigation Type®! None
Hình 1.20: Các thông số cho Activity chính
- Sau khi chọn nút Finish, trở lại giao diện Eclipse dé cé thê lập trình ứng dụng
Android đầu tiên (hình 1.21):
i stylesxmt
> values-sw600dp + Gp values-sw720dp-land
ih AndroidManifestxmt
\Mui ic_launcher-web.png (2) proguard-project.ot
Trang 19- Tép MainActivity java chia ma nguồn để tạo giao diện người dùng UI cho tmg
dụng và thiết lập giao diện người dùng trong tệp acfivify_main.xmi (hình 1.22):
TReloWodtdAndrot/zrc/coaexaraple/helloworidandroid? Ayes ADT
File Edit Refactor Source Navigate Search Project Run Window Help
[P= ee SO GS 1 PPS Sie + i
1S Package Explorer $2 as 7 =o: [Ö MainActivityjava 32 Soe
4 83 com.eample.helloworldandroid ®import android.os.Bundle;£7
public class HainActivity extends Activity {
é ate the wenu; this adds items to the action bar if it is present
Hình 1.22: Nội dung tập tin MainActivity.java
- Vi du vé n6i dung tép MainActivity java:
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present getMenulnflater().inflate(R.menu.main, menu);
return true;
}
- Eclipse sử dụng các thông số được thiết lập từ hộp thoại New Android Project
để tạo tự động lớp MainActivityjava Vi du: khai bao ĐÓI com.example helloworldanaroid, lớp MainActivity với phương thức onCreafe() Nội dụng tệp định nghĩa giao diện người dùng UI activity_main.xmI
Trang 20android:layout_width="match_parent"
Tệp giao dién activity_main.xml dugc té chirc theo cac thé xml, ở đây giao diện ngudi ding chita thé RelativeLayout giip cho cdc thanh phan trong giao điện
người dùng ở vị trí tương đối với nhau Thẻ TextView cho phép đưa đoạn văn
bản lên màn hình ứng dụng với thuộc tính android:text= "(string/hello_worild"
Đề thiết kế giao diện cho ứng dụng android, có thể sử dụng giao diện dòng lệnh
của tệp acfivify mainxmi như hình 1.23 hay giao diện đồ họa của tệp
S layout
(Q._activity_main.xml,
4 c3 menu 43: mainxml
@
a al
Trang 21(RO TedView [Ab Large Tet sa, s | =
3 Medium Text “OO os: &@ |: SỈ
ÑB] Small Te# [£*] Button
Hình 1.24: Giao diện đồ họa của tép activity_main.xml
- Tệp strings.xml chứa các chuỗi văn bản được sử dụng trong ứng dụng Và có thé
chỉnh sửa, thêm mới các chuỗi bằng giao điện đồ họa (hình 1.25):
Pew OT ar PSS ri ey HE Se |" QaidcAccees 7 : 23 | (Gila)
{8 Package Explorer £2 = EF] {B MeinActivityjava Pee
\® Android Resources (default)
> Ô» drawable-mdpi is
Ge dimweblesihdol Resources Elements ©) © ©) © ©) © SF MH) Az Attributes for hello world (String)
Œ drawable-hdni = @Strings®, with optional simple formatting, can be
4G layout id acy manant © PP DEN GUGE, G) action <ettings (String stored and retrieved as resources You can add
formatting to your string by using three standard
i (3) hello_world (String) ÍRemove HTML tags: b, i, and u If you use an apostrophe cra
, quote in your string, you must either escape it or
mainam! Up enclose th b a HN hex iind of enclosing i
4 & values aie
Hình 1.25: Giao diện đồ hoa cua tép strings.xml
- Ví dụ về nội dung tệp strings.xml: các thẻ string với thuộc tính name và giá trị: thẻ string thuộc tính name = app_ name - tên ứng dụng, với giá trị Hello World Android Sửa thẻ string với thuộc tinh name = hello_world cé gia tri “Hello Android World, Here I Come!”
Trang 22- Chay ứng dụng trên máy ảo Android:
Trên menu của Eclipse, chọn Run —> Run As — Android Application sẽ có giao
điện máy ảo với ứng dụng Hello World Android đang chạy như hình 1.26:
Hình 1.26: Ứng dụng Hello World Android trên máy ảo Android
IV NEN TANG LAP TRINH HƯỚNG ĐÓI TƯỢNG
Để xây dựng ứng dụng Android, chúng ta cần có kiến thức căn bản về lập trình
hướng đối tượng trong Java Trong phần này, chúng tôi sẽ trình bày khái quát về đặc
điểm lập trình hướng đối tượng của ngôn ngữ lập trình Java Nền tảng của lập trình
hướng đối tượng là đối tượng và lớp Đối tượng trong ngôn ngữ lập trình hướng đối
tượng tương tự như các đối tượng trong đời sống hàng ngày Giống như các đối
tượng hữu hình trong thế giới thực, các đối tượng có các đặc điểm của mình, các đặc
điểm đó được gọi là các trạng thái hay thuộc tính Các hành động của đổi tượng
được gọi là hành vi hay phương thức Ví dụ, đối tượng phổ biến trong cuộc sống
hàng ngày đó là ô tô (hình 1.27)
21
Trang 23Một số đặc điểm hay trạng thai của ô tô:
- Màu sắc (màu đỏ - red);
- Hướng di chuyển (N: tiến, S: lùi, E: rẽ phải, W: rẽ trái);
- Đổi số (Shift gears)
- Phanh (Apply the brake)
- Chuyén huéng (Turn the wheels)
- Bat 4m thanh (Turn on the stereo)
- Sử dụng đèn pha (Use the headlights)
- Xi nhan (Use the turn signals)
NT
Ca CỊ m2)
Hình 1.27: Các đặc điểm, hành vi của ô tô
Trong Java, một lớp được định nghĩa là một đối tượng có thể thực hiện các hành
vi (các phương thức) và có một số thuộc tính Khi một lớp được lập trình trong java,
có thể tạo ra các thê hiện cho mỗi một đối tượng Ví dụ lớp Car:
' class Car {
int speed = 15; int gear = 1;
int drivetrain = 4; String direction ="N";
String color = "Red"; String fuel ="Gas";
{SSS LSSSsS SSS SSeS eee eee ee ee eee eee eee =
| void shiftGears (int newGear) { '
Ị gear = newGear; {
22
Trang 24Phương thức tăng tốc: tăng téc d6 thém acceleration km/h
poten See Semen open Soe Se eee eee ey
1 1
¡_VOid accelerateSpeed (¡int acceleration) { '
' speed = speed + acceleration; '
String color = "Red";
String fuel = "Gas";
void shiftGears (int newGear) {
gear = newGear;
! void accelerateSpeed (int acceleration) { :
speed = speed + acceleration;
! void applyBrake (int brakingFactor) { :
speed = speed - brakingFactor;
' void turnWheel (String newDirection) {
direction = newDirection;
23
Trang 25Lớp Car cho phép định nghĩa một đối tượng ô tô, nhưng chỉ có thể sử dụng khi
khởi tạo một bản thể Quay trở lại với ví dụ Hello Wordl Android, trong tệp MainActivity java, sử dụng phương thức onCreafe() Khởi tạo hai đối tượng carOne
và carTwo, thực hiện một số phương thức cho hai đối tượng:
protected void onCreate(Bundle savedInstanceState) {
Để khai báo một đối tượng gồm có định nghĩa một đối tượng loại Car, tên của đối
tượng, gán đối tượng carOne bằng một đối tượng Car mới với tất cả các thuộc tính mặc định:
Java hỗ trợ kế thừa giữa các lớp, cho phép các lớp con có thể thừa kế các thuộc tính, phương thức từ lớp cha Ngoài các thuộc tính, phương thức kế thừa từ lớp cha, các lớp con còn có các thuộc tính, phương thức của riêng mình Java
không hỗ trợ đa kế thừa Một lớp con chỉ có thể kế thừa từ một lớp cha và nhiều
lớp con có thể kế thừa từ một lớp cha Ví dụ: quay trở lại với lớp Car, có lớp con 24
Trang 26AE ni
SUV kế thừa các thuộc tính và phương thức của lớp cha Car Ngoài các phương
thức kế thừa từ lớp cha Car, lớp con SUV còn có các phương thức onStarCall(),
turnTowLightOn() v.v Tương tự như vậy, lớp con SPORT cũng kế thừa các
thuộc tính, phương thức của lớp cha Car, và còn có các phương thức
acfivateOverdrive(), openTop() như hình 1.28
ON STAR _/(Re0)\ TOW LIGHT OVERDRIVE /(#e0)
(SHIFT GEARS jŒswab\ APPLYBRAKE \ / SHIFT GEARS |
ACCELERATE a) TURN WHEELS
Hình 1.28: Các lớp con SUV, SPORT kế thừa từ lop cha CAR
Dé tạo lớp con kế thừa từ lớp cha sử dụng từ khóa extend với cú pháp như sau:
class Suv extends Car {
Các thuộc tính mới :
Các phương thức mới} '
beeen eee eee ee ee ee ee ee ee eee ee ee ee ee ee eee
Ví dụ: Lớp con SUV kế thừa từ lớp Car:
class Suv extends Car {
void applyBrake (int brakingFactor) {
super.applyBrake(brakingFactor);
speed = speed - brakingFactor;
Lớp con SUV sẽ có các thuộc tính, phương thức từ lớp cha Car va con có thuộc
tính, phương thức của riêng mình Trong rất nhiều ứng dụng viết bằng Java, các lớp
thường có chung một mẫu nhất định Đặc điểm này rất phổ biến trong các nền tảng
như Android Trong Java, giao diện thường được sử dụng trong việc tạo một lớp
theo một mẫu nhất định Ví dụ: giao diện công khai ICar, ICar có các phương thức
mà các ô tô thực hiện Tức là, một lớp ô tô khi triển khai giao diện ICar sẽ có tất cả
các phương thức của giao diện ICar
29
Trang 27thường tạo ra một gói mặc định chứa tất cả các lớp được tạo ra dé phat trién ứng dụng Như ví dụ HelloWorld-Android ở phần trước, gói được tạo ra có tên là com.example.helloworldandroid Các gói được khai báo ngay ở dòng đầu tiên của
public interface lCar {
void shiftGears (int newGear);
void accelerateSpeed (int acceleration);
void applyBrake (int brakingFactor);
void turnWheel (String newDirection);
class Car implements ICar{
int speed = 15;
int gear = 1;
int drivetrain = 4;
String direction = "N";
String color = "Red";
String fuel = "Gas ";
public void shiftGears (int newGear) {
gear = newGear;
}
public void accelerateSpeed (int acceleration) {
speed = speed + acceleration;
}
public void applyBrake (int brakingFactor) {
speed = speed - brakingFactor;
}
public void turnWheel (String newDirection) {
direction = newDirection;
Tổ chức gói logic cho các lớp: Mỗi khi tạo một dự án mới trong Android, Eclipse
bất kỳ tệp mã nguồn nào của ứng dụng Android
26
Trang 28Sau khi khai báo tên gói, sử dụng câu lệnh import dé khai báo nhập các gói, lớp
có sẵn sẽ được sử dụng trong ứng dụng Về cơ bản, khái niệm gói tương tự như cấu
trúc phân cấp thư mục trong máy tính Các gói là cách tổ chức các tệp mã nguồn
theo chức năng Android tổ chức các lớp thành các gói lôgic Trong ví dụ Hello
World Android ở phần trước, nhập các gói để hỗ trợ các hàm chức năng của lớp
MainActivity java trong img dụng
import android.os.Bundle;
import android.app.Activity;
62m cm SE C6 62c TS nhi TS nSSxrcSsEen=se=s.<Ss-=-=< -=-=.-›
Theo như ví dụ Hello World Android:
- android: được hiểu là đây là một gói Android
- app hay os: đề cập đến chức năng bao quát của gói
- Activity và Bundle: tên các lớp mà nhập hay sử dụng
Từ đây có thể suy ra được lớp Activity được chứa trong gói android.app Phần
app chỉ ra rằng gói logic này chứa các lớp cần thiết để tạo nên ứng dụng Android,
một trong số các lớp trong gói app là lớp Activity, cho phép định nghĩa giao diện
người dùng UI Các gói không phải là mức tô chức mã nguồn cao nhất trong Java
Có một mức cao hơn đó là nền tảng (platform) hay giao điện lập trình ứng dụng
(application programming interface - API) Đây là mức chứa một tập các gói cơ bản
nhất cho một ngôn ngữ lập trình hay cho một sản phẩm chuyên biệt, ví dụ như
Android
V PHAT TRIEN UNG DUNG TRONG ANDROID
Có hai ngôn ngữ chính được sử dụng trong phát triển ứng dụng Android đó là
Java và XML XML viết tắt cho ngôn ngữ đánh dấu mở rộng (eXtensible Markup
Language) XML được phát triển từ năm 1996 XML được sử dụng trong Android
dé định nghĩa các cấu trúc mà không cần sử dụng mã nguồn Java phức tạp XML sử
dụng các cấu trúc được gọi là thẻ tương tự như HTML Ví dụ trong Android, thẻ
<resources> chứa định nghĩa tài nguyên, thẻ <string> chứa định nghĩa về các chuỗi
ký tự Thẻ <string> có các thuộc tính và các giá trị Trong ứng dụng Hello World
Android ở phần trước, đã có định nghĩa hai chuỗi ký tự bằng XML
27
Trang 29
Dinh dang tệp thực thi trong Android là APK Khi dịch và xuất ra một ứng dụng cho
việc phân phối các ứng dụng tới người dùng, Eclipse IDE và Android SDK sẽ xuất ra
tệp ứng dụng với phần mo rong apk Chi cé duy nhat mét tệp apk được xuất ra Tp apk bao gồm tat cả mã nguồn của ứng dụng (dưới dạng định đạng tệp tin thực thi dex),
tất cả tài nguyên đa phương tiện và tệp tin 4øaoi4Manjestxmi Nếu ứng dụng của
chúng ta được gọi là Zoomerza, thì tệp tin được phân phối cho người dùng sẽ là Zoomerza.apk Tệp tin Zoomerza.apk chỉ chạy được các trên thiết bị sử dụng hệ điều
hành Android Định dạng tệp tin ak gần giống với định dạng chuẩn của Java là Jar
Tép tin apk sử dụng chuẩn nén tương tự như chuẩn nén ZIP Có thể xem được nội dung
tệp tin apk bằng cách sử dụng các phần mềm giải nén nhu PKZIP, WinZip, WinRAR,
Ark và 7-Zip Cách xem nội dung các tệp tin HelloWorldAndroid.apk trên Windows:
- Đổi phần mở rộng của tệp tin HelloWorldAndroid.apk thành HelloWorld Android.zIp
- Nếu nhận được cảnh báo về việc đổi tên tệp tin thì chọn đồng ý
- Mở tệp tin HelloWorldAndroid.zip ra có thể thấy nội dung tệp như hình 1.29
Trang 30Như hình 1.29, chúng ta có thể thấy tệp HelloWorldAndroid.apk chứa các file
như: AndroidManifest.xml, classes.dex và chứa thư mục “/res” với các thư mục
con “/drawable”, “/layout”
Như đã biết, Android cần một tệp XML trong thư mục gốc của dự án là
AndroidManifest.xml để khởi động một ứng dụng Có một tệp khác trong thư mục
gốc của dự án được Eclipse tạo ra và không nên sửa đổi nội dung đó là
default.properties Ching ta nén str dung tép AndroidManifest.xml vi:
- Dé dang lập trình
- Cho phép định nghĩa các cấu trúc đữ liệu logic cho Android có thể hiểu và
sử dụng
- Tồn tại bền ngoài mã nguôồn Java, Android có thể dễ dàng truy cập trước khi
truy xuất đến mã nguồn Java và các tài nguyên khác
Tệp AndroidManjest.xml giúp hệ điều hành biết được một ứng dụng sẽ làm gì,
các thành phần được sử dụng, các tài nguyên Android cần được cấp quyền để sử
dụng bên trong môi trường Android Khi ứng dụng được khởi động lần đầu, các định
nghĩa dữ liệu AndroidManifestxml được Android sử dụng để thiết lập vùng tài
nguyên và bộ nhớ hệ thống cho các thành phần ứng dụng cần phải hỗ trợ Ngoài ra
còn được sử dụng để định nghĩa quyên truy cập các vùng nhạy cảm trong Android
(như cơ sở dữ liệu bên trong và cá nhân) mà ứng dụng cần truy cập Nội dung tệp
AndroidManifest.xml của ứng dụng HelloWorldAndroid trong phần trước thê hiện
như hình dưới
Một số thẻ chính là:
- Thẻ <manjesf>: Chứa 4 thuộc tính chuẩn gồm có tên gói của ứng dụng
com.example.helloworldandroid, thuộc tính xmlns:android để định nghĩa trực
tuyến lược đồ Android XML và hai thuộc tính về Android XML là mã và tên
phiên bản
- Thé <activity>: Khai bao tén lép Activity cé trong img dung voi thudc tính
android:name Tương tự cho các lớp Service, Broadcast receiver v6i cdc thẻ
<service>, <receiver>
- Thé <intent-filter>: Dac ta hanh dong và loại đối tượng Intent khởi động ứng
dụng Hành động là android.intent.action.MAIN - tải tệp main.xml Loại là
android.intent.category.LAUNCHER - chỉ ra lớp Activity (ở đây là MainActivity)
là activity khởi động của tmg dung Vi MainActivity chita thé <intent-filter>
29
Trang 3130
- Thé <uses-sdk>: Dac ta phién ban SDK cũ nhất được hỗ trợ và chạy ứng dụng
thông qua thuộc tính android: minSdkVersion, android: targetSdkfWersion
<action android:name="android.intent.action MAIN" />
<category android:name="android.intent.category LAUNCHER" />
</intent-filter>
</activity>
‘ </application>
</manifest>
Sau day, chúng ta sẽ tìm hiểu về bốn thành phần chính trong ứng dụng Android
- 4ctiviy: xử lý giao diện người dùng Một Activity chứa một cấu trúc giao
diện người dùng để thực thi các tác vụ của người dùng thông qua màn hình
hiển thị của điện thoại thông minh Ứng dụng Android có thể có một hoặc
nhiều Activity Trong thực tế, các ứng dụng phức tạp thường mỗi giao diện
người dùng đều có Activity của riêng mình Nếu ứng dụng có nhiều Activity
thì sẽ có một Activity được thực thi khi ứng dụng khởi động Activity này có
phương thức onCreafe() sẽ gọi tệp định nghĩa giao diện người dùng
MainActivity.xml
Trang 32| public class MainActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) {
+ Chạy các thành phần đa phương tiện như video, luồng âm thanh
+ Truyền tải dữ liệu giữa các thiết bị qua Bluetooth
Broadcast receiver: xử lý giao tiếp trong ứng dụng Đây là thành phần chịu trách
nhiệm trung gian liên lạc giữa hệ điều hành Android và các thành phần ứng
dụng khác hay giữa các thành phần ứng dụng với nhau Android thường gửi các
thông điệp liên quan đến trạng thái thời gian thực của bản thân điện thoại chạy
hệ điều hành Có nhiều trạng thái mà bất kỳ một ứng dụng Android nào cũng cần biết để đảm bảo tính toàn vẹn của ứng dụng như tình trạng mất nguồn, ứng dụng cần phải lưu trữ các tệp Một số thông điệp của hệ điều hành như:
+ Cảnh báo mức năng lượng thấp của pin
+ Thông báo thay đổi múi giờ
+ Thông báo thay đổi tùy chọn ngôn ngữ
+ Thông báo máy ảnh đã được sử dụng đề chụp ảnh
+ Một số thông điệp truyền giữa các ứng dụng
+ Cảnh báo dữ liệu đã được tải thành công
+ Thông báo luồng video đã được lưu trữ và sẵn sàng để chơi
Có thê triên khai các Broadcast receiver của riêng mình tùy theo nhu câu Giông
như Service, Broadcast receiver được thi ngầm và không có các giao diện người
dùng Tuy nhiên, các broadcast receiver có thể kích hoạt hay gọi các giao diện người dùng để phản hồi các thông điệp Broadcast receiver cũng có thể sử dụng lớp Android NotificationManager để cảnh báo người dùng thông qua các phương thức
thông báo sẵn có của điện thoại như nhấp nháy đèn nền màn hình, chơi một âm
31
Trang 33thanh, rung dién thoai va dat biéu tugng canh bdo lién tuc trén thanh trang thai dién thoại thông minh
-_ Confent provider: xử lý dữ liệu và quản trị cơ sở dữ liệu Cung cấp cách tạo,
truy cập dữ liệu cho các ứng dụng Các tiện ích của điện thoại Android sử dụng content provider để truy cập vào cơ sở dữ liệu danh bạ của điện thoại Các cơ đữ liệu content provider có sẵn như: danh bạ, hình ảnh, âm thanh và video Để tạo Content provider, tạo lớp kế thừa từ lớp cơ sở ContentProvider Lớp cơ sở ContentProvider triển khai tập các chuẩn của các phương thức thực
hiện việc lưu trữ và truy hồi dữ liệu
Trong Android, các đối tượng /z⁄ez chứa nội dung của thông điệp được trao đổi
giữa các module, thường là khởi động hay gửi chỉ dẫn cho tác vụ mới Giao tiếp với các loại thành phần khác nhau trong Android bằng các phương thức khác nhau để
nhận ra các đối tượng 7z⁄emí Các thành phần trong ứng dụng Android sử dụng phương thức của các đối tượng en/ theo:
- Một Activity được khởi động hoặc đã khởi động, được giao một tác vụ mới bằng cách truyền thông qua một đối tượng Intent bằng phương thức Context.start4cfivify() Lớp Activity có thể xem được nội dung của đối tượng Intent thông qua phương thức ge/zen/() và ở đối tượng Intent tiếp theo bằng phuong thtrc onNew!Intent()
- Một Service được khởi động bằng cách truyền một đối tượng Intent qua phương thức Cowiext.sfariService(), sau đó gọi phương thức onSiar() của lớp service, và truyền đối tượng ?zen: chứa hành động và dữ liệu mà service phải thực hiện
- Néu Service dang chay va đối tượng 7#⁄enf chứa chỉ dẫn mới, đối tượng Intent được truyền qua phương thức Context.bindService() đề thiết lập kết nối mới giữa thành phần gọi và service đang chạy
- Thanh phan broadcast receiver được khởi động bằng cách truyền một đối
tượng ?z/en vào phương thức Cozext.sendBroadecast() hoặc tùy chọn cho
phương thức Context.sendOrderedBroadcast() hoặc phương thức Context.sendStickyBroadcasf() Trong trường hợp này, đối tượng ?z/en chứa
thông điệp về hoạt động và đữ liệu service cần thực hiện
VI VÒNG ĐỜI CỦA MỘT ỨNG DỤNG ANDROID
Trong các phần trước, chúng ta đã tìm hiểu về các thành phần cơ bản nhất trong một ứng dụng Android Trong phần này, chúng tôi tiếp tục giới thiệu về vòng đời của một ứng dụng Android (Life-cycle) Android có cơ chế quản lý các tiến trình 32
Trang 34theo chế độ ưu tiên Các tiến trình ứng có độ ưu tiên thấp sẽ bị Android giải phóng
mà không hề cảnh báo nhằm đảm bảo tài nguyên Một đặ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 sự kết hợp của:
- Những thành phần của ứng dụng đang chạy
- Tầm quan trọng của các phần đó với người dùng
- Vùng nhớ chiếm lĩnh trong hệ thống
Các loại tiến trình của Android:
- Foreground process: 1a tién trinh cua img dụng hiện thời đang được người dùng tương tác
- Visible process: là tiễn trình của ứng dụng mà activity đang hiển thị đối với
người dùng (phương thức onPaused(Q) của activity được gọi)
- Service process: la Service dang chay
- Background process: 1a tién trinh ca img dung ma céc activity của nó không
hiển thị với người dùng (phương thức onStopQ của activity được gọi)
Empty process: tién trinh khong có bất kỳ một thành phần nào hoạt động
Theo chế độ ưu tiên thì khi cần tài nguyên, Android sẽ tự động giải phóng tiến
trình, trước tiên là các empty process
Activity được quản lý bởi Activity Stack (hình 1.30)
[S2 224 nny free resources
Eres tilt aed
Hinh 1.30: Ngan xép cdc Activity
Khi một activity mới được khởi động, nó được đặt trên cùng của ngăn xếp và trở
thành running activity Những activity khác vẫn còn nằm trong ngăn xếp và sẽ không được chạy tại foreground cho tới khi running activity vẫn còn đang đứng ở cùng Nếu người dùng bấm nút “back” trên điện thoại thì running activity sẽ bị bỏ ra khỏi ngăn xếp Vòng đời của một Activity có ba trạng thái sau:
33
Trang 3534
- Running (dang kich hoat): Khi man hinh 1a Foreground (Activity nam trén
cling trong ngan xếp và cho phép người dùng tương tác)
- Paused (Tam ding): Activity bi mất focus nhưng vẫn nhìn thấy được Activity
này, ví đụ mở một activity mới dưới dạng Dialog Trường hợp này nó vẫn có
khả năng bị hệ thống giải phóng trong tình huống bộ nhớ quá ít
Sfopped (dừng): Activity mất focus và không nhìn thấy được, ví dụ mở một
activity mới lên mà full màn hình Trong trường hợp này activity có thể bị hệ
thống giải phóng trong bất kỳ tình huống nào
Trong vòng đời của một ứng dụng Android cần phân biệt:
- Entire lifetime: 1a khoang thoi gian gitta lan goi onCreate() va onDetroy()
Visible lifetime: Xay ra khi goi onStart() cho téi lic gọi onStop() Trong
trường hợp này chúng ta vẫn có thê thấy màn hình Activity (có thể tương tác
khi nó là foreground)
Forefround lifetime: Xay ra tit khi goi onResume() cho tdi lic goi onPause()
Trong suốt thời gian này Activity luôn nằm ở trên cùng và ta có thê tương tác
VỚI nó
Khi xây dựng Activity cho ứng dụng cần phải viết lại phương thức onCreate() để
thực hiện quá trình khởi tạo Các hàm thực thi như sau (hình 1.31)
onCreafeQ: Được gọi khi activity được khởi tạo lần đầu tiên Nên khởi tạo
thiết lập static lại phương thức này, như tạo View, bind data, v.v Phương
thức này nhận vào một Bundile object chứa thông tin trạng thái Theo sau
phương thức này luôn là onStartQ
onRestart(): Chỉ được gọi khi activity đã dừng và trước khi activity được khởi
động lại
onSfarfQ: Được gọi trước khi activity hiện ra với người dùng Theo sau sẽ là
onResume() néu activity chạy trên foreground hoặc theo sau sẽ là onStopQ) nếu
như activity bị ân đi
onResume(Q: Được gọi trước khi activity bắt đầu tương tác với người dùng
Activity đang ở trên top của ngăn xếp, theo sau sẽ là onPause()
onPause(): Được gọi khi hệ thống bắt đầu khôi phục một activity khác Thông
thường đây sẽ là nơi bạn lưu trữ những thay đổi của người dùng, để dừng các
thao tác animation hoặc những tiến trình tiêu tốn nhiều CPU Theo sau sẽ là
onResume() nếu activity trở lại forepround hoặc theo sau sẽ là onStopQ nếu
activity sé bi ân di Activity có thê bị giải phóng bởi hệ thống