1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình Lập trình Android: Phần 1 - Lê Hoàng Sơn (Chủ biên)

70 98 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 70
Dung lượng 15,87 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

Rod ấ +

GIÁO TRÌNH LẬP TRÌNH

Trang 2

LE HOANG SON (chi bién) - NGUYEN THO THONG

GIAO TRINH LAP TRINH

Trang 4

LOI 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 6

Chuong 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 9

Cà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 15

Il 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 16

New 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 20

android: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 23

Mộ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 24

Phươ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 25

Lớ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 26

AE 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 27

thườ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 28

Sau 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 30

Như 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 31

30

- 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 33

thanh, 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 34

theo 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 35

34

- 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

Ngày đăng: 17/12/2021, 10:04

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm