1. Trang chủ
  2. » Luận Văn - Báo Cáo

thiết kế phần mềm tìm kiếm trên bản đồ số của google maps dựa trên nền tảng android dành cho điện thoại di động

89 801 0
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

Tiêu đề Thiết kế phần mềm tìm kiếm trên bản đồ số của Google Maps dựa trên nền tảng Android dành cho điện thoại di động
Tác giả Vũ Đức Mạnh
Người hướng dẫn Ninh Xuân Hải
Trường học Học viện Công nghệ Bưu chính Viễn thông Cơ sở tại Thành phố Hồ Chí Minh
Chuyên ngành Công Nghệ Thông Tin
Thể loại đồ án tốt nghiệp
Năm xuất bản 2009
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 89
Dung lượng 1,2 MB

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

Nội dung

Ví dụ, nếu nhu cầu ứng dụng của bạn để hiển thị một danh sách các di chuyển hình ảnh và các ứng dụng khác đã phát triển một thanh cuộn phù hợp và đã tạo cho nó có sẵn sàng đối với những

Trang 1

CƠ SỞ TẠI THÀNH PHỐ HỒ CHÍ MINH

ĐIỆN THOẠI DI ĐỘNG

Giáo viên hướng dẫn : Ninh Xuân Hải

Sinh viên thực hiện : Vũ Đức Mạnh

Mã số sinh viên : 405170038

Năm 2009

Trang 2

Thành phố Hồ Chí Minh, ngày…tháng … năm 200…

PHIẾU NHẬN XÉT ĐỒ ÁN TỐT NGHIỆP HỆ ĐẠI HỌC

(Dành cho người hướng dẫn – Biểu 2)

1 Tên đề tài tốt nghiệp : Thiết kế phần mềm tìm kiếm trên bản đồ số của Google maps dựa trên nền tảng Android dành cho điện thoại di động

Mã đề tài : 09405170031

Ngày sinh : 04/11/1987 MSSV:405170038

Tổng quát về số liệu các kết quả thực hiện:

Số trang:……… Số chương (phần):………

Số bảng số liệu:……… Số hình vẽ:………

Số tài liệu tham khảo:……… Phần mềm sử dụng:………

Hiện vật (sản phẩm phần mềm, phần cứng):………

3 Những ưu điểm chính của đồ án tốt nghiệp: 4.1.Nội dung thực hiện:………

………

………

4.2.Kết quả sản phẩm:………

………

………

4.3.Khả năng áp dụng:………

………

………

4.4.Hình thức trình bày:………

………

………

4 Những thiếu sót chính của đồ án tốt nghiệp: ………

………

………

5 Đề nghị : Được bảo vệ Bổ sung thêm để bảo vệ Không được bảo vệ 6 Đánh giá chung: Điểm số :………./10; Điểm chữ:………

Xác nhận của Bộ môn/ Khoa Giáo viên hướng dẫn

Trang 3

Thành phố Hồ Chí Minh, ngày…tháng … năm 200…

PHIẾU NHẬN XÉT ĐỒ ÁN TỐT NGHIỆP HỆ ĐẠI HỌC

(Dành cho người đọc duyệt – Biểu 3)

1 Tên đề tài tốt nghiệp:………

………

Mã đề tài:………

2 Họ tên sinh viên thực hiện:………Lớp:………

Ngày sinh:……… MSSV:………

3 Tổng quát về số liệu các kết quả thực hiện: Số trang:……… Số chương (phần):………

Số bảng số liệu:……… Số hình vẽ:………

Số tài liệu tham khảo:……… Phần mềm sử dụng:………

Hiện vật (sản phẩm phần mềm, phần cứng):………

4 Những ưu điểm chính của đồ án tốt nghiệp: 4.1.Nội dung thực hiện:………

………

4.2.Kết quả sản phẩm:………

………

4.3.Khả năng áp dụng:………

………

4.4.Hình thức trình bày:………

………

5 Những thiếu sót chính của đồ án tốt nghiệp: ………

………

Đề nghị : Được bảo vệ Bổ sung thêm để bảo vệ Không được bảo vệ 6 3 câu hỏi sinh viên trả lời trước Hội đồng: a) ……… …………

………

b) ……….……

………

c) ……… …………

………

7 Đánh giá chung: Điểm số: …… /10; Điểm chữ:………

Xác nhận của Bộ môn/ Khoa Giáo viên đọc duyệt

Trang 4

Lời cảm ơn

Sau những năm học tại trường, em đã được học và tiếp thu nhiều kiến thức mới từ sự chỉ bảo tận tình của các Thầy Cô, đã được sống trong tình thương, tình cảm trìu mến của bạn bè đây là khoảng thời gian này ý nghĩa Đề tài thực tập tốt nghiệp đánh dấu một bước ngoặc mới trong cuộc đời em

Em xin chân thành cảm ơn khoa công nghệ thông tin

II, Học viện công nghệ bưu chính viễn thông cơ sở tại TP

Hồ Chí Minh đã tạo điều kiện để em hoàn thành tốt đề tài thực tập tốt nghiệp này

Em xin gởi lời cảm ơn chân thành đến thầy Ninh Xuân Hải , thầy đã hỗ trợ cho em rất nhiều để em hoàn thành

đề tài thực tập tốt nghiệp này

Em xin gởi lời cảm ơn quý thầy cô trong học viện đã tận tình giảng dạy, trang bị cho tôi những kiến thức quý báu trong suốt quá trình học tập tại trường

Một lần nữa, em xin chân thành cảm ơn

Sinh viên

Trang 5

Mục Lục

Phần I : Lý thuyết

Chương I : Giới Thiệu về nền tẳng Android của Google………2

1.1 Android là gì ? ………2

1.2 Sự ra đời của liên minh thiết bị cầm tay mở OHA……….2

1.3 Sự phát triển của Android……… 3

1.3.1 Điều kiện phát triển……… 3

1.3.2 Xu hướng phát triển……….……….5

Chương II : Tổng quan các thành phần của Android……….… 7

1.1 Những đặc trưng của và kiến trúc của Android……….…….… 7

1.1.1 Những đặc trưng của Android……… …… 7

1.1.2 Tổng quan kiến trúc của Android……… …… 7

1.2 Các quy tắc cơ bản của ứng dụng trong Android……….……… 9

1.2.1 Khái quát các thành phần ứng dụng của Android……… 10

1.2.2 Activities và Tasks……… 14

1.2.3 Processes và Threads……… 16

1.2.4 Vòng đời của Android……….…19

Chương III : Trình bày một số công cụ lập trình trên Android… 30

1.1 Cài đặt bộ công cụ Android SDK và plugin (ADT) cho Eclipse………… 30

1.2 Tổng quan các công cụ được dùng trong bộ Android SDK……… 30

1.2.1 Khái quát các công cụ trong Android SDK……… 33

1.2.2 Android Emulator………36

1.2.2.a Tổng quan Emulator……… 37

Trang 6

1.2.2.b Khởi động và dừng Emulator……….37

1.2.2.c AVDs và Emulator……….38

1.2.2.d Điều khiển Emulator……… 39

1.2.2.f Làm việc với các Disk Image của Emulator……… 40

1.2.2.g Kết nối mạng trên Emulator……… 43

1.2.2.h Sử dụng Console Emulator………47

1.2.2.i Sử dụng các Skin Emulator………56

1.2.2.j Chạy nhiều Emulator một lúc………58

1.2.2.k Cài đặt ứng dụng trên Emulator……….58

1.2.2.l Mô phỏng SD Card………60

1.2.2.m Khắc phục các vấn đề Emulator……….60

1.2.2.n Giới hạn các khả năng mô phỏng của Emulator Android… 60

1.3 Hello World , Android……….60

Phần II: Thiết kế phần mềm tìm kiếm trên bản đồ số của Google… 65

Chương I: Giới thiệu về dịch vụ vị trí và bản đồ trong android…………65

1.1 Dịch vụ vị trí……….65

1.2 Thư viện bên ngoài của google maps……… 65

1.3 Cấu trúc dữ liệu của bản đồ số trên google maps……….67

Chương II: Chi tiết cách lấy dữ liệu bản đồ số của google maps……… 67

2.1 Đăng ký api key và hiện map đơn giản với một MapActivity……… 67

2.2 Tìm vị trí và đường đi trên google maps………75

2.3 Mô phỏng GPS trên emulator ………76

Phần kết luận………72

Phần tham khảo……… 73

Trang 7

Danh mục hình vẽ

Số Hình Tên Hình Trang

Trang 8

Các thuật ngữ

Emulator Networking Mô phỏng mạng của android

Java Virtual Machine Máy ảo java

Trang 9

Một công cụ của android sdk

những ứng dụng android

xuất từ UNIX

một inch vuông

Evolution

Một công nghệ di động được nâng cấp từ GPRS

nâng cấp từ GPRS

được phát triển trên nền tảng công nghệ thông tin di động toàn cầu (GSM)

Communication

Hệ thống thông tin di động toàn cầu thế hệ thứ 2 (2G)

Protocol

Giao thức hoạt động trên layer

2 - Internetwork trong mô hình TCP/IP

protocol

Giao thức quản lý nhóm Internet

nhỏ của Sun Microsystems

Applet

Các ứng dụng của J2ME

trợ ngôn ngữ c/c++

Trang 10

NMEA National Marine Electronics

Association

Định nghĩa tổng hợp điện tử

và dữ liệu

quyền của Apple

sử dụng trên các mạng TCP/IP

vận

lõi bên cạnh TCP trong bộ giao thức TCP/IP

Telecommunications System

Mạng di động thế hệ thứ 3

Trang 12

Chương I : Giới Thiệu về nền tảng Android của google

1.1 Android là gì ?

Hình 1.1: Logo đại diện cho android

Nền tảng android hay còn gọi là hệ điều hành android của Google nó bao gồm một

hệ điều hành dựa trên mã nguồn mở Linux OS (Kernel 2.6) ,(midware) phần mềm trung

gian và các ứng dụng cơ bản

Chúng ta có thể hiểu nó 1 cách đơn giản android là hệ điều hành mã nguồn mở

dành cho thiết bị cầm tay

Một số hỗ trợ của android cho các thiết bị :

• Màn hình cảm ứng

• 3GWifire

• Trình duyệt dựa trên webkit

• Tin nhắn (SMS) theo luồng

• Định dạng MPEG-4, H.264, MP3, AACBộ tăng tốc đồ họa 3D

1.2 Sự ra đời của liên minh thiết bị cầm tay mở OHA

Dự án xây dựng nền tảng nguồn mở cho những chiếc điện thoại Android của

Google tuy còn đang phát triển nhưng đã tạo nên khá nhiều sự quan tâm và tò mò của

những người yêu thích công nghệ,những lời đồn thổi xung quanh những từ về công nghệ

điện thoại đại loại “Gphone” hay “Google Phone” với những chức năng hiếm có xuất hiện

từ cuối năm 2004 đã tốn khá nhiều giấy mực của giới báo chí, truyền thông

Eric Schmidt cho biết Google đã lập tổ chức Open Handset Alliance (OHA – một tổ chức

đa quốc gia) bao gồm 34 thành viên với các công ty hàng đầu về công nghệ và di động

toàn cầu như Qualcomm, Intel, Motorola, Texas Instruments và LG Electronics, các nhà

mạng như T-Mobile, Sprint Nextel, NTT DoCoMo và China Mobile… nhằm tập trung

xây dựng một chiếc điện thoại di động tốt hơn dựa trên hệ điều hành Android – một hệ

điều hành mã nguồn mở dùng cho tất cả các thiết bị cầm tay

Trang 13

Hình 1.2: Các thành phần trong liên minh OHA

Vài nét về Tổ chức Open Handset Alliance (OHA):OHA được xây dựng từ những

tổ chức phát triển điện thoại di động bao gồm các công ty cung cấp dịch vụ điện thoại di

động, sản xuất thiết bị cầm tay, sản xuất phần mềm, dụng cụ bán dẫn, và các công ty kinh

doanh Tổ chức này đang mở cửa cho tất cả các công ty khác nhau và người sử dụng có

thể chọn một trong các nhà cung cấp dịch vụ tốt hơn thông qua OHA với tính năng sẵn có

của hệ điều hành mở Android

1.3 Sự hướng phát triển của android

1.3.1 Điều kiện phát triển

Trên bước đường tạo dựng nền tảng, phát triển thì Google Android cũng gặp

không ít “kẻ ngáng đường” Trong số đó, đối thủ mạnh nhất của nó về phương diện mã

nguồn mở là LiMo Dù rằng cả hai hệ điều hành LiMo và Android đều phát triển dựa trên

nhân Linux nhưng chúng không giống nhau mà có sự khác biệt rất lớn LiMo được hỗ trợ

từ quỹ LiMo (quỹ này được hình thành bởi các hãng lớn Motorola, NEC, NTT DoCoMo,

Orange, Panasonic, Samsung và Vodafone) Nên cả hai nền tảng đều có những “ông

Trang 14

trùm” tài chính mạnh làm đối tác nhưng Android được chính Google đứng ra phát triển

trong khi LiMo hoàn toàn không có một công ty cụ thể nào đứng ra bảo trợ chính

SDK 1.0 Đây là công cụ giả lập thiết bị ảo trên máy tính để phát triển ứng dụng với các

hàm API hỗ trợ cho những người mới lập trình trên các thiết bị di động sử dụng nền tảng

Android thông qua ngôn ngữ lập trình Java,cùng theo đó là sự ra đời của android-market

nơi các lập trình viên rao bán các ứng dụng của mình , nó cũng giống như app-store của

apple

Android có lợi thế lớn so với đa số hệ điều hành dành cho di động đang phát triển

mạnh trên thị trường như osx(iphone), symbian , là nó một hệ điều hành mở và hoàn

toàn miễn phí nên các lập trình viên rất dễ dành phát triển nó và giá thành cũng rẻ hơn cả

về mặt thiết bị lẫn ứng dụng.Một điểm nữa cũng rất quan trọng đó là nó được phát triển

và hậu thuẫn mạnh từ Google và liên minh OHA

Các ứng dụng của android phát triển trên ngôn ngữ lập trình java có thể kể ra 3

• Các ứng dụng viết ra sẽ có giá thành rẻ hơn

Nhưng sử dụng ngôn ngữ java cũng có điểm bất lợi là các ứng dụng sẽ chạy chậm

hơn so ứng dụng chạy trên nên c/c++.Chính vì vậy google đã cho ra phiên bản android

NDK mới 1.5 hỗ trợ lập trình bằng ngôn ngữ là c/c++

Trang 15

Hình 1 3 : Một số nền tảng lập trình di động

1.3.2 Xu hướng phát triển

Hiện tại android đang phát triển rất nhanh cả về thiết bị lẫn ứng dụng :

• Về mặt thiết bị thì từ cuối năm 2008 HTC đã tung ra sản phẩm đầu tiên chạy hệ

điều hành android có tên gọi là “ Dream ” hay còn gọi là G1 ,đến nửa đầu năm

2009 thì một số các nhà sản xuất lớn đã tung ra các sản phẩm sử dụng hệ điều

hành android như HTC-mobile, Samsung , và có một số khác đang chuẩn bị

tung ra sản phẩm của mình như Motorola…

Trang 16

Hình 1.4 : HTC Dream (G1

đẩy sự phát triển của android mới đây google đã tung ra phiên bản android-sdk 1.5

thay thế cho phiên bản android-sdk 1.1 cũ với nhiều tính năng cải tiến hấp dẫn

.Ngoài ra còn tổ chức cuộc thi viết phần mềm cho android trên toàn thế giới như

giải ADC1 vào 17/3/2008 với tổng giá trị giải thưởng lên đến 10 triệu USD đã thu

hút hơn 1700 sản phẩm tham dự Số lượng sản phẩm đoạt giải chiếm khá nhiều

liên quan đến thông tin địa lý như : BreakCrumbz(tìm đường bằng hình

ảnh),Locale(ứng dụng tự động cấu hình thiết bị dựa theo vị trí tọa

lạc),piggyback(ứng dụng lên lịch lữ hành hợp đồng xe)…

Có vẻ như dịch vụ dựa trên vị trí (Location Based Service) sẽ là con át chủ bài của

Android để cạnh tranh với iPhone Khi đã có sẵn trong tay các vũ khí cực mạnh

như Google Maps, Google Earth, thì việc chiến thắng trên lĩnh vực LBS không

phải là khó đối với Android Bên cạnh đó cũng còn có nhiều dịch vụ trực tuyến

miễn phí mà google cung cấp như google docs,mail,google ladtitude

Tiếp sau đó là phiên bản android-sdk 1.6 với tên mã Donut nổi bật trong các chức

năng mới là công cụ tìm kiếm giúp người dùng điện thoại có thể tìm kiếm thông tin

trong chính máy của mình, một điểm nữa là Donut có chức năng nhận dạng chữ viết

tay của người dùng trên màn hình cảm ứng rồi chuyển thành những ký tự chuẩn nhờ

vậy việc viết tin nhắn dễ dàng hơn bao giờ hết và mới đây nhất là bản 2.0 tên mã

Eclair với nhiều sự thay đổi về mạng xã hội , giao diện , bộ sdk mới cho các nhà lập

trình Trong một vài năm tới ngoài điện thoại di động ra android còn hướng đến các

thiết bị khác nữa như netbook,laptop,PC,….Nó đều có thể thích ứng để hoạt động

Trang 17

Chương II : Tổng quan các thành phần của Android

1.1 Những đặc trưng và kiến trúc của Android

1.1.1 Những đặc trưng của android

• Application framework (Nền tảng ứng dụng ): hỗ trợ sử dụng lại và thay thế các thành phần

• Dalvik virtual machine (Máy di động ảo Dalvik ): Giả lập thiết bị di động sử dụng Android

• Integrated browser (Tích hợp trình duyệt web) : cung cấp mã nguồn mở bộ phát triển trình duyệt Webkit

• Optimized graphics (Tăng tốc đồ họa ) : cung cấp các thư viện đồ họa 2D, 3D sử dụng OpenGL ES 1.0 (phụ thuộc vào thiết bị phần cứng)

• SQLite : Cấu trúc dữ liệu lưu trữ

• Media support (Hỗ trợ đa phương tiện ): Hỗ trợ phần lớn các định dạng âm thanh, hình ảnh, video phổ biến như (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)

• Công nghệ GSM – GSM Telephony (phụ thuộc nền tảng phần cứng)

• Hỗ trợ Bluetooth, EDGE, 3G, and WiFi (phụ thuộc thiết bị phần cứng)

• Hỗ trợ Camera, GPS, compass, and accelerometer (phụ thuộc thiết bị phần cứng)

thiết bị giả lập,Công cụ bắt lỗi, kiểm soát bộ nhớ và độ ổn định, và các plugin của Eclipse IDE

1.1.2 Tổng quan kiến trúc của Android

Trước tiên chúng ta sẽ xem sơ đồ các thành phần chính của android gồm : Application , Application Framework , Libraries , Android Runtime , Linux Kernel

Trang 18

Hình 2.1 : Sơ đồ các thành phần chính của hệ điều hành Android

Từng thành phần chính trong cấu trúc :

• Application : android sẽ cung cấp một tập hợp của các ứng dụng lõi bao gồm emai client , chương trình SMS , lập lịch , bản đồ , trình duyệt , danh bạ và những ứng dụng khác nữa Khi nhà phát triển viết một ứng dụng dành cho Android, anh ta thực hiện các đoạn mã trong môi trường Java Sau đó, nó sẽ được biên dịch sang các bytecode của Java, tuy nhiên để thực thi được ứng dụng này trên Android thì nhà phát triển phải thực thi một công cụ có tên là dx Đây là công cụ dùng để chuyển đổi bytecode sang một dạng gọi là dex bytecode "Dex" là từ viết tắt của "Dalvik executable" đóng vai trò như cơ chế

trông giống như máy ảo Java (Java Virtual Machine) nhưng như đã đề cập ở trên Dalvik thực thi dex bytecode chứ không phải Java bytecode Hơn thế nữa giữ chúng tồn tại những điểm khác nhau về class file

• Application Framework : các lập trình viên có đầy đủ quyền truy cập các khung api sử dụng các lõi ứng dụng Kiến trúc của những ứng dụng đó được thiết kế

để đơn giản hóa việc sử sụng lại các thành phần.Bất kỳ ứng dụng nào cũng có thể khai báo những khả năng của nó và những ứng dụng khác sau đó có thể sử

Trang 19

dụng lại những khả năng đó.Khi các cơ chế giống nhau thì sẽ cho phép người

sử dụng thay thế các thành phần đó

Những ứng dụng thiết lập lên những dịch vụ và hệ thống bao gồm :

9 Content Provider - cung cấp chức năng truy vấn dự liệu giữa các ứng dụng của Android

9 A Resource Manager - cung cấp chức năng truy cập tài nguyên ngoại trừ mã nguồn

9 A Notification Manager - cung cấp chức năng tùy chỉnh những cảnh báo lên màn hình ở thanh status

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

• Libraries :

9 System C library – Một BSD thực thi của hệ thống thư viện C chuẩn

9 Media Libraries - dựa trên chuẩn opencore của packetvideo’s, thư viện này

hỗ trợ playback và recording của những định dạng audio và video phổ biến ,có cả định dạnh những file ảnh tĩnh , bao gồm các định dạng : MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG

9 Surface Manager – quản lý việc truy cập hệ thống phụ và ghép những đường nối của những lớp đồ họa 2D và 3D từ nhiều ứng dụng

9 LibWebCore – là một công cụ trình duyệt web hiện đại mà những khả năng của nó có cả trình duyệt android và web nhúng

9 SGL – công cụ đồ họa 2D nằm phía dưới

9 3D Libraries – Một sự bổ sung dựa trên OpenGL ES 1.0 APIs , thư viện này

sử dụng cả phần cứng gia tốc 3D

9 FreeType – biến đổi những font và ảnh bitmap

9 SQLite – công cụ cơ sở dữ liệu mạnh mẽ và nhẹ được dùng cho tất cả các ứng dụng

• Anroid Runtime : Android bao gồm tập hợp các thư viện lõi , nó cung cấp hầu hết các chức năng sẵn có trong ngôn ngữ java

• Linux kernel : Android dựa vào dịch vụ hệ thống nhân của phiên bản linux 2.6 như bảo mật ,quản lý bộ nhớ,quản lý quy trình ,ngăn xếp mạng và các kiểu driver.Nhân này cũng hoạt động như lớp trừu tượng giữa phần cứng và phần còn lại của ngăn xếp phần mềm

1.2 Các quy tắc cơ bản của ứng dụng trong Android

Các ứng dụng Android được viết bằng các ngôn ngữ lập trình Java Việc biên soạn

mã Java - cùng với bất kỳ dữ liệu nào và các tập tin theo yêu cầu của ứng dụng đó – được gói lại bởi công cụ appt trong gói phần mềm android, một file lưu trữ được đánh dấu bởi một file có đuôi * Apk file này là một phương tiện truyền tải cho các ứng dụng và cài đặt

nó trên các thiết bị di động, đó là file để người dùng tải về các thiết bị của họ Tất cả các

mã trong một file * Apk được coi là một trong những ứng dụng

Trang 20

• Theo mặc định, tất cả các ứng dụng chạy trong xử lý Linux của riêng của nó Android bắt đầu tiến trình khi có một đoạn code của ứng dụng cần phải được thực hiện, và tiến trình tắt khi nó không còn cần thiết, và nguồn tài nguyên hệ thống được yêu cầu cho các ứng dụng khác

• Mỗi tiến trình riêng của chúng có máy ảo Java (VM) riêng, do đó, các đoạn code ứng dụng chạy tách biệt khỏi các code của tất cả các ứng dụng khác

• Theo mặc định, mỗi ứng dụng đều được cấp một User ID Linux duy nhất Quyền được thiết lập để cho các file của ứng dụng chỉ được nhìn thấy bởi user

đó

Có thể sắp xếp cho hai ứng dụng để chia sẻ cùng một ID người dùng, trong đó có trường hợp họ sẽ có thể xem các file của nhau Để bảo tồn nguồn tài nguyên hệ thống, các ứng dụng có cùng ID cũng có thể sắp xếp để chạy trong cùng một tiến trình Linux, chia sẻ cùng một VM

1.2.1 Khái quát các thành phần ứng dụng của android

Một trong những đặc trưng chính của android là một ứng dụng có thể sử dụng các thành phần của những ứng dụng khác Ví dụ, nếu nhu cầu ứng dụng của bạn để hiển thị một danh sách các di chuyển hình ảnh và các ứng dụng khác đã phát triển một thanh cuộn phù hợp và đã tạo cho nó có sẵn sàng đối với những người khác, bạn có thể gọi thanh cuộn để làm công việc, thay vì bạn phải tự phát triển của riêng bạn.Các đoạn code của bạn không kết hợp các đoạn code của các ứng dụng khác hoặc liên kết đến nó, thay vào đó, nó đơn giản chỉ khởi động các đoạn code của các ứng dụng khác khi cần sử dụng

Để làm việc này, hệ thống phải có khả năng bắt đầu tiến trình ứng dụng khi bất kỳ phần nào của nó cần sử dụng, và khởi tạo các đối tượng Java cho phần đó Vì vậy, không giống như các ứng dụng trên hầu hết các hệ thống khác, các ứng dụng Android không có một mục nhập cho tất cả mọi thứ trong các ứng dụng (không có hàm main()) Thay vào

đó, chúng có thành phần chủ yếu là hệ thống có thể khởi tạo và chạy khi cần thiết Có bốn loại thành phần:

• Activities(android.app.Activity) - đây là lớp khỏi tạo giao diện ứng dụng nội bộ trên nên Android tương tư như MIDlet trong J2ME.Một hoạt động thể hiện một hình ảnh giao diện người dùng cho một sự cố gắng tập trung để người sử dụng

có thể thực hiện Ví dụ, một activitiy có thể trình bày một danh sách các mục để người dùng có thể lựa chọn hoặc nó có thể hiển thị hình ảnh cùng với các chú thich Một tin nhắn văn bản ứng dụng có thể có một activity hiển thị một danh sách các địa chỉ liên lạc để gửi tin nhắn đến một activity thứ hai để viết tin nhắn này ứng với các địa chỉ liên lạc, và các activity khác để xem xét lại các tin nhắn

cũ hoặc 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 liền nhau nhưng mỗi activity độc lập với những activity khác Mỗi activity đều triển khai thực hiện như là một lớp phụ của lớp activity

cơ bản

Trang 21

• Service(android.app.Service): cung cấp các dịch vụ liên quan đến client/service Một Service sẽ chạy ngầm bên dưới, sau đó các client (Activity)

sẽ kết nối và truy xuất các hàm trên dịch thông qua Interface class.Một service không có trực quan giao diện người sử dụng nhưng sẽ chạy ngầm trong nền của giao diện người dùng đó

• Broadcast receiver (android.content.BroadcastReceiver): đây là một ứng dụng chạy ngầm dùng để dọc và cập nhật thông tin trên UI, vi dụ như cập nhật sự thay đỗi giờ, pin

Một cái máy thu broadcast sẽ nhận và phản hồi lại những thông báo broadcast Có rất nhiều broadcast bắt nguồn từ code hệ thống như broadcast thông báo thay đổi múi giờ, pin thấp …

• Content Provider : cung cấp chức năng truy vấn dự liệu giữa các ứng dụng của Android.Một content provider chỉ dẫn thiết lập cở sở dữ liệu của một ứng dụng sẵn sàng cho các ứng dụng khác.dữ liệu này có thể được lưu trong file hệ thống trong database của SQLite Bất cứ khi nào có một yêu cầu cần được xử lý bởi một thành phần, Android bảo đảm rằng các tiến trình ứng dụng của các thành phần sẽ được chạy, nó bắt đầu nếu cần thiết và luôn giữ cho các thành phần đó sẵn sằng

Thành phần kích hoạt – intents : Các content provider được kích hoạt khi được

một yêu cầu từ một ContentResolver Ba thành phần khác là activities,broadcast

và receivers được kích hoạt bởi thông báo không đồng bộ gọi từ intents Một intent là một đối tượng mà nó giữ những nội dung của thông báo Đối với các activity và service, đòi hỏi tên của chúng và những chỉ dẫn URI của dữ liệu để thực hiện theo Ví dụ, nó có thể truyền tải một yêu cầu cho một activity trình bày một hình ảnh cho người sử dụng hoặc cho phép người dùng chỉnh sửa một số văn bản Đối với các máy thu broadcast , các tên của đối tượng Intent đang hoạt động sẽ được công bố Ví dụ, nó có thể thông báo cho ai quan tâm rằng các máy ảnh đã được bấm nút

Có Những phương thức riêng cho từng kiểu thành phần kích hoạt :

• Một activity là đã được phát động thông qua một đối tượng intent là Context.startActivity() hoặc Activity.startActivityForResult.Những đáp ứng của activity có thể được quan sát từ những intent đầu mà nó có thể được gọi bởi phương thức getIntent().Android gọi các phương thức getIntent() của activity

để chuyển qua bất kỳ intent kế tiếp nào

Một activity thường bắt đầu cái kế tiếp nó.Nếu cái kết quả mong muốn được gửi trả lại từ hành động bắt đầu của nó, nó sẽ gọi startActivityForResult() thay

vì startActivity().Ví dụ nếu nó bắt đầu một activity cho phép người dùng lựa chọn một hình ảnh,nó có thể mong đợi kết quả được trả lại là những hình ảnh

Trang 22

đã chọn.Kết quả được trả lại là một đối tượng intent mà nó thông qua đó để gọi

phương thức onActivityResult() của activity

• Một service được bắt đầu thông qua đối tượng Content.startService() Android

gọi phương thức onStart() của service và chuyển nó qua một đối tượng intent

• Một ứng dụng có thể khởi động broadcast bằng một đối tượng intent thông qua

các phương thức như :

Context.sendBroadcast(),Context.sendOrderedBroadcast() và Context.sendStickyBroadcast ở trong bất kỳ biến nào của chúng.Android

cung cấp intent đó tới tất cả các broadcast nhận được mà chúng quan tâm bằng cách gọi phương thức onReceive()

Tắt các thành phần : Một content provider đang hoạt động trong khi đó chỉ đáp

ứng 1 yêu cầu từ 1 ContentResolver , một broadcast nhận kích hoạt chỉ khi đáp

ứng một thông báo broadcast khác Như vậy rõ ràng ta không cần tắt các thành

phần này

Android có các phương thức để tắt các dịch vụ và các hoạt động trong một cách

trật tự :

• Một activity có thể tắt bằng cách gọi phương thức finish() của nó.Một trong

những activity có thể tắt các activity khác (nó bắt đầu với

startActivityForResult()) là finishActivity()

• Một service có thể được ngừng lại khi gọi phương thức stopSelf() của nó hoặc

gọi Context.stopService()

Các thành phần có thể được tắt bởi hệ thống khi chúng không còn sử dụng hoặc

khi android cần tái thiết bộ nhớ để có thêm những hoạt động khác

File Manifest : Trước khi android có thể khởi động ứng dụng nó phải biết các

thành phần đang có trong ứng dụng, vì vậy ứng dụng sẽ khai báo các thành phần

đó trong file Manifest hiện có của gói vào trong gói ứng dụng android , file apk

lưu giữ các đoạn code, tài nguyên, tập tin của ứng dụng

File manifest có cấu trúc là một file xml luôn được đặt tên là AndroidManifest.xml

cho tất cả các ứng dụng Trong việc khai báo các thành phần , khi đặt tên bất kỳ

một thư viện nào của ứng dụng phải dựa vào liên kết đó(bên cạch thư viện android

mặc định) và xác định quyền truy cập bất kỳ ứng dụng nào dự kiến được cấp phép

Nhiệm vụ chính của file manifest là thông báo các thành phần của ứng dụng

android

Ví dụ một activity có thể được khai báo như sau :

<?xml version="1.0" encoding="utf-8"?>

<manifest >

Trang 23

Các thành phần khác được khai báo một cách tương tự như : <service> cho các phần tử của service , <receive> cho các phần tử của broadcast receivers và

<provider> cho các phần tử của content provider Activities, Services, Content Providers nếu chúng không được khai báo trong manifest thì sẽ không hiện trong

hệ thống và không bao giờ được chạy.Tuy nhiên đối với broadcast receivers có thể được khai báo trong manifest hoặc cũng có thể được tạo ra trong đoạn code tự động(như đối tượng broadcast receivers) và đăng ký với hệ thống bằng cách gọi Context.registerReceiver()

Intent Filters(Các bộ lọc Intent) : Một đối tượng intent nếu có thể nhắm rõ ràng

tên của một thành phần android sẽ tìm thành phần đó(dựa trên việc khai báo trong file manifest) và kích hoạt nó còn nếu không thì android phải định vị một thành phần tốt nhất có thể đáp ứng cho đối tượng intent đó,bằng cách so sánh các đối tượng intent vào các mục tiêu tiềm năng của các bộ lọc intent Dưới đây là một mở rộng của các ví dụ trước đó cho biết thêm về intent filters :

<intent-filter >

<action android:name="com.example.project.BOUNCE" />

<data android:type="image/jpeg" />

Trang 24

cả hai hoạt động trong cùng một task

Mỗi task là một stack của các activity, không phải là lớp hay các phần tử trong file manifest, như vậy không có cách nào thiết lập giá trị cho các task độc lập của các activity

đó

Các hành vi được mô tả là chỉ cần mặc định các hành vi cho activity và task Nhưng sẽ còn có nhiều cách để sửa đổi hầu hết tất cả mọi khía cạnh của nó Sự kết hợp các activity với task, và các hành vi của một activity trong một task, được kiểm soát bởi

sự tương tác giữa các thiết lập cờ trong đối tượng intent để bắt đầu các activity và các thuộc tính thiết lập trong activity của các phần tử của <activity> trong file manifest

Trang 25

allowTaskReparenting clearTaskOnLaunch alwaysRetainTaskState finishOnTaskLaunch

Affinities and new tasks : Theo mặc định tất cả các activity trong ứng dụng đều

có một affinity khác nhau cho mỗi activity

Các chế độ khởi động : Có 4 chế độ khởi động trong đó chế độ standard là chế độ

Làm sạch stack : Nếu người dùng bỏ task trong một thời gian dài hệ thống sẽ làm

sạch task đó trong tất cả các activity trừ activity gốc.Ý tưởng này là sau một thời gian người dùng có khả năng bỏ di những gì đã và đang làm trước khi trở về công việc nào đó để bắt đầu mới Có vài thuộc tính của activity mà có thể được sử dụng

để điều khiển hành vi và sửa đổi nó :

Thuộc tính alwaysRetainTaskState – Nếu thuộc tính này thiết lập là “true”ở gốc activity của một task , mặc định mô tả các hành vi không xảy ra.Task giữ lại tất cả các activity trong stack của nó thậm chí sau một thời gian dài

Thuộc tính clearTaskOnLaunch - Nếu thuộc tính này thiết lập là “true”ở gốc activity của một task ,stack này được xóa xuống activity gốc.Đây là cực đối lập của alwaysRetainTaskState Người dùng luôn trở về trạng thái ban đầu của task thậm chí sau một sự vắng mặt tức thời

Thuộc tính finishOnTaskLaunch – giống như clearTaskOnLaunch nhưng nó vận hành trên một activity đơn , không phải là một task toàn vẹn và nó có thể làm cho bất kỳ một activity nào rời khỏi stack bao gồm cả activity gốc Khi thiết lập là

“true”,activity này vẫn còn một phần của task đó cho phiên hiện tại.Nếu người dùng bỏ nó đi và sau đó trở lại task đó, thì thuộc tính này ko còn hiện hữu

Sự bắt đầu các task : Một activity được thiết lập như là một mục điểm cho một

task bằng cách cho nó một intent filter với "android.intent.action.MAIN" được xác định như là hành động và "android.intent.category.LAUNCHER" như là xác định loại

Khả năng thứ 2 rất quan trọng : người dùng phải có khả năng bỏ lại một task và sau đó trở lại sau Vì lý do này, hai chế độ khởi động luôn luôn đánh dấu

Trang 26

các activity như là khởi đầu một task, "singleTask" và "singleInstance",chỉ nên sử

ra nếu thiếu filter là: Một Intent khởi động một "singleTask" activity, bắt đầu một task mới, và người sử dụng dành một chút thời gian làm việc với task đó Người sử dụng sau đó bấm phím HOME Task được sắp xếp phía sau và bị làm mờ đi trên màn hình

Một khó khăn tương tự chú ý ở cờ FLAG_ACTIVITY_NEW_TASK Nếu

cờ này làm cho một activity bắt đầu một task mới và người sử dụng bấm phím HOME để bỏ lại nó, phải có một số cách thức cho người sử dụng để định hướng trở lại cho nó một lần nữa Một số đơn vị (chẳng hạn như người quản lý thông báo) luôn luôn bắt đầu các activity ở một task bên ngoài, chúng luôn luôn đặt FLAG_ACTIVITY_NEW_TASK trong các intent mà để chuyển vào startActivity () Nếu bạn có một activity có thể kéo theo được của một thực thể bên ngoài mà có thể sử dụng cờ này

Đối với những trường hợp bạn không muốn người sử dụng có thể quay trở lại một hoạt động, thiết lập các phần tử <activity> của finishOnTaskLaunch là

"true"thì sẽ xóa sạch các stack trước đó

1.2.3 Processes và threads

Khi các thành phần một chức năng ứng dụng chạy lần đầu tiên, Android bắt đầu một tiến trình Linux cho nó với một thread đơn Mặc định, tất cả các thành phần của ứng dụng chạy trong process và thread

Tuy nhiên, chúng ta có thể sắp xếp cho các chức năng chạy trong các tiến trình khác đi, và có thể sinh ra thêm các thread cho bất kỳ tiến trình nào

Processes

Tiến trình chứa các thành phần chạy được điều khiển bởi các tập tin rõ ràng Thành phần-<activity>, <servive>,<receiver> và <provider> mỗi thành phần có một thuộc tính tiến trình có thể chỉ định một thành phần đang chạy Các thuộc tính này có thể thiết lập để mỗi thành phần chạy trong tiến trình của chính nó, hoặc một vài thành phần chia sẻ một tiến trình trong khi các thành phần khác thì không chúng cũng có thể được thiết lập các thành phần của các ứng dụng các chạy trong cùng một tiến trình-cung cấp ứng dụng chia sẻ Linux user ID giống nhau và được thiết kế bởi cùng tác giả Thành phần <application> cũng có tiến trình đặc trưng, cho cài đặt giá trị mặc định chấp nhận tất cả các thành phần

Android có thể quyết định tắt tiến trình tại một số điểm , khi bộ nhớ bị chậm

và yêu cầu các tiến trình khác Các thành phần ứng dụng đang chạy trong tiến trình bị hủy Một quá trình được khởi động lại cho những thành phần làm việc lại một lần nữa

Khi quyết định chấm dứt tiến trình, Android có ảnh hưởng tương đối quan trọng cho người dùng Ví dụ, nó sẵn sàng shut down một process với các hoạt động

Trang 27

mà không còn nhìn thấy trên màn hình hơn một tiến trình với các hoạt động nhìn thấy được Quyết định có hoặc không chấm dứt một tiến trình, do đó, phụ thuộc vào các thành phần hoạt động trong quá trình

Threads

Mặc dù bạn có thể hạn chế ứng dụng trong một tiến trình, sẽ có điều tương

tự khi cần sinh ra thread để sử dụng Bất cứ điều gì không hoàn thành nhanh chóng

sẽ được đưa vào một thread khác

Thread được tạo ra trong code sử dụng chuẩn dự án Java Thread Android cung cấp một sô lượng các lớp để quản lý thread-Looper cho chạy lặp vòng thông điệp bên trong một thread, Handler xử lý tin nhắn và lớp HandlerThread để thiết lập thread với một thông điệp lặp vòng

Trang 28

Hình 2.2 : Sơ đồ lớp IBinder

Bên trong các lớp có tất cả các mã số cần thiết để quản lý từ xa thủ tục các cuộc gọi cho các interface với các IDL Cả hai bên ,trong các lớp thực thi của IBinder interface Một trong số đó được sử dụng ở cục bộ và bên trong của hệ thống; code bạn viết có thể bỏ qua nó Một cái khác, được gọi là stub, mở rộng lớp Binder Ngoài việc code bên trong của IPC effectuating các cuộc gọi, nó chứa các khai báo cho các phương thức trong interface rpc bạn khai báo Bạn sẽ cho lớp phụ stub thực thi những phương thức đó, như được chỉ ra trong biểu đồ

Thông thường, quá trình ở xa sẽ được quản lý bởi một dịch vụ (vì một dịch

vụ có thể thông báo cho hệ thống về quá trình và các kết nối vào các quá trình khác) Nó sẽ có cả hai giao diện tập tin được tạo ra bởi các công cụ aidl và lớp phụ stub triển khai thực hiện các phương pháp rpc Khách hàng của các dịch vụ sẽ chỉ

có file giao diện được tạo ra bởi các công cụ aidl

Thiết lập một kết nối giữa một service và clients của service đó: clients sẽ thực thi phương thức onServiceConnected() and onServiceDisconnected vì thế chúng có thể được thông báo khi kết nối thành công tới remote service được thiết lập và khi nó bỏ qua Chúng sau đó sẽ gọi bindService() để thiết lập kết nối

Phương thức onBind() của service đó sẽ thực thi chấp nhận hoặc loại bỏ, phụ thuộc vào intent nó nhận được (các intent được chuyển tới bindService()).Nếu kết nối này được chấp nhận , nó sẽ trả về trường hợp của lớp phụ stub

Trang 29

trong một đối tương IBinder bắt đầu trong cùng một tiến trình như là IBinder, các phương thức được thực hiện tại thread người gọi Tuy nhiên, khi nguồn gốc các cuộc gọi khác trong tiến trình khác, các phương thức được thực hiện trong một chuỗi lựa chọn từ một dải thread mà Android duy trì trong cùng một quá trình như

là IBinder; nó không phải thực hiện trong thread chính của tiến trình Từ các dịch

vụ có thể có nhiều hơn một khách hàng, nhiều hơn một dải thread có thể tham gia vào cùng một phương thức IBinder cùng một lúc.Do đó, được triển khai để được thread safe

Tương tự, một nhà cung cấp nội dung có thể nhận được dữ liệu yêu cầu đó bắt nguồn trong tiến trình khác Mặc dù ContentResolver và các lớp ContentProvider ẩn chi tiết về cách thức quản lý truyền thông liên quá trình như thế nào,phương thức ContentProvider đáp ứng những yêu cầu - các phương thức truy vấn (), chèn (), xóa (), cập nhật (), và getType () - được gọi là từ một dải thread trong nội dung của nhà cung cấp tiến trình, không phải thread chính của tiến trình Từ những phương thức này có thể được gọi là từ bất kỳ thread nào cùng một lúc, chúng cũng phải được triển khai để thực hiện được safe thread

1.2.4 Vòng đời của android

Các thành phần ứng dụng có một lifecycle - bắt đầu khi Android khởi tạo chúng để đáp ứng intents thông qua một kết thúc khi các trường được tiêu huỷ Đôi khi chúng có thể được hoạt động , không hoạt động hoặc trong trường hợp các hoạt động hiển thị cho người sử dụng hoặc vô hình Phần này bàn về các lifecycle , các activity, service, broadcast receiver – bao gồm cả trạng thái có thể xảy ra ở trong khoảng thời gian hoạt động của chúng, các phương pháp thông báo cho bạn về chuyển tiếp giữa các trạng thái

và hiệu ứng của các trạng thái đó , về khả năng dẫn xử lý ,chúng có thể được chấm dứt và tiêu huỷ

Activity lifecycle

Một activity có 3 trạng thái cơ bản sau :

• Trạng thái hoạt động khi nó được kích hoạt hoặc ở mặt trước màn hình(ở top của stack hiện tại) Đó là activity trọng tâm của các hành động người dùng

• Trạng thái tạm dừng nếu nó mất trọng tâm nhưng vẫn hiển thị user Đó

là activity khác đánh lừa phía trên của nó và activity không bao trùm toàn bộ màn hình, do đó, một số bị tạm dừng activity có thể hiển thị thông qua Một activity tạm dừng là hoàn toàn còn sống (nó duy trì tất

cả các trạng thái, các thông tin và vẫn gắn với cửa sổ quản lý), nhưng có thể bị tắt bởi hệ thống trong tình huống bộ nhớ xuống cực thấp

• Trạng thái ngừng lại nếu như nó hoàn toàn bị che mờ bởi các activity khác Nó vẫn còn giữ lại tất cả các trạng thái và các bộ phận thông tin Tuy nhiên, nó không còn hiển thị cho người dùng, do đó các cửa sổ bị ẩn

và nó sẽ thường bị tắt bởi bộ nhớ hệ thống khi cần sử dụng ở nơi khác

Trang 30

Nếu một activity dừng tạm thời hoặc dừng hẳn, hệ thống có thể ngắt nó ra

từ bộ nhớ hoặc yêu cầu nó kết thúc (gọi phương thức finish ()) Khi nó hiển thị một lần nữa cho user, nó phải hoàn toàn khởi động lại và phục hồi lại trạng thái cũ

Một activity chuyển từ trạng thái này sang trạng thái khác, nó sẽ được thay đổi bằng cách gọi các phương thức được bảo vệ ở dưới :

void onCreate(Bundle savedInstanceState)

void onStart() void onRestart() void onResume() void onPause() void onStop() void onDestroy() Tất cả các phương thức này giúp bạn có thể ghi đè lên để làm công việc thích hợp khi có sự thay đổi Tât cả các hoạt động phải triển khai onCreate() để thiết lập khởi tạo khi đối tượng khởi tạo lần đầu tiên Cũng có thể triển khai onPause() để trao đổi dữ kiệu thay đổi và mặc khác chuẩn bị ngừng tương tác với user

7 phương thức dưới đây định nghĩa toàn bộ lifecycle của một activity Có ba vòng lặp lồng nhau mà bạn có thể giám sát thực hiện chung :

• Toàn bộ thời gian sống của một activity sẽ xảy ra giữa lần gọi đầu tiên gọi đến onCreate () cho đến một lần gọi kết thúc gọi đến onDestroy () Một hoạt động thực hiện tất cả các thiết lập ban đầu của trạng thái "Global" trong onCreate (), và giải thoát tất cả các tài nguyên trong onDestroy () Ví dụ, nếu nó có một thread chạy phía sau để tải dữ liệu từ mạng, nó có thể tạo ra thread trong onCreate () và sau đó ngừng trong onDestroy ()

• Thời gian sống thấy được của một activity sẽ xảy ra giữa một cuộc gọi đến onStart () tương ứng cho đến khi một cuộc gọi đến onStop () Trong thời gian này, người sử dụng có thể xem các hoạt động trên màn hình, tuy nhiên

nó có thể không được trong foreground và tương tác với người sử dụng Giữa hai phương pháp này, bạn có thể duy trì được các tài nguyên cần thiết

để hiển thị các hoạt động cho người dùng Ví dụ, bạn có thể đăng ký một BroadcastReceiver trong onStart () để giám sát các thay đổi mà tác động của

UI, và unregister nó trong onStop () khi người sử dụng có thể không còn nhìn thấy những gì bạn đang hiển thị Các phương thức onStart() và onStop

Trang 31

() có thể được gọi nhiều lần, như là hoạt động luân phiên giữa hiện và ẩn với người sử dụng

• Các foreground lifetime của một activity sẽ xảy ra giữa một cuộc gọi đến onResume () tương ứng cho đến khi một cuộc gọi đến onPause () Trong thời gian này, hoạt động này là ở phía trước của tất cả các hoạt động khác trên màn hình và có tương tác với người sử dụng Một hoạt động thường xuyên có thể chuyển đổi giữa resume và pause - ví dụ, onPause () được gọi

là khi thiết bị đi vào trạng thái ngủ hoặc khi một activity mới được bắt đầu, onResume () khi activity result hoặc một intent mới được sinh ra Vì vậy, code trong hai phương thức này khá nhẹ

Dưới đây là những biểu đồ minh họa các lặp vòng và các đường dẫn một activity có thể mất giữa các trạng thái Các hình ovals lớn là trạng thái chính

mà activity có thể xảy ra, hình chữ nhật vuông góc đại diện cho gọi các phương thức phản hồi có thể triển khai để thực hiện khi các activity chuyển giữa các trạng thái

Trang 32

ycle của

Trang 33

Phương Thức Mô Tả Tắt? Kế Tiếp

tác cơ bản — tạo views,kết nối dữliệu tới danh sách.Phương thức này được chuyển qua cho gói đối tượng của trạng thái activity trước

đó, nếu trạng thái đó được nắm bắt thì (xem Saving Activity State, )

Luôn được onStart theo sau

onRestart()

Được gọi khi ứng dụng chuyển sang onStop(), nhưng muốn khởi động lại bằng onStart

Luôn được theo sau bởi onStart()

No onStart()

onStart() hàm này được gọi khi lớp ứng

onResume()

or onStop()

onResume() Được gọi sau khi onStart() hoặc

Yes

onResume()

or onStop()

Được theo bởi onDestroy() nếu activity này bỏ đi

Yes

onRestart()

or onDestroy()

onDestroy()

hàm được gọi trước khi ứng dụng thoát bằng việc gọi hàm Activity.Finish()

Được gọi trước khi activity nào đó

bị hủy Đây là lời gọi cuối cùng

mà activity nhận được Nó có thểđược gọi cả hai khi activity kết thúc hoặc vì hệ thống tạm thời bịhủy bỏ ,trường hợp này activity cất giữ không gian.Bạn có thể phân

Yes nothing

Trang 34

Phương Thức Mô Tả Tắt? Kế Tiếp

biệt giữa hai kịch bản với phương thức isFinishing()

Lưu ý cột Tắt? trong bảng ở trên Nó cho biết có hay không hệ thống có thể tắt tiến

trình lưu trữ các activity bất cứ lúc nào sau khi phương thức trả về, mà không cần thực hiện những dòng khác của code activity Ba phương thức (onPause (), onStop (), và onDestroy ()) được đánh dấu "Yes" Bởi vì onPause () là đầu tiên của ba phương thức, đó chỉ là một bảo đảm được gọi khi tiến trình này bị tắt - onStop () và onDestroy () có thể không Vì thế, nên sử dụng onPause () để viết dữ liệu (chẳng hạn như người sử dụng sửa đổi) để lưu trữ

Phương thức được đánh dấu "NO" trong cột Tắt? bảo vệ quá trình lưu trữ các

activity không bị tắt kể từ thời điểm chúng được gọi

Một activity mà không dùng kỹ thuật "tắt" theo định nghĩa này có thể vẫn được tắt bởi hệ thống - nhưng có thể sẽ chỉ xảy ra trong hoàn cảnh khó khăn khi không có tài nguyên khác

Saving activity state(Cất giữ trạng thái activity)

Khi hệ thống chứ không phải là người sử dụng shut down một activity để bảo tồn

bộ nhớ, người sử dụng mong đợi trả về activity và tìm thấy nó trong các trạng thái trước

Để nắm bắt trạng thái trước khi activity này bị tắt, bạn có thể thực hiện một phương thức onSaveInstanceState () cho các hoạt động Android gọi phương thức này trước khi thực hiện các activity dễ bị tổn thương do bị tiêu huỷ - có nghĩa là, trước khi onPause() được gọi Nó chuyển qua phương thức đối tượng Bundle mà ở đó bạn có thể ghi lại trạng thái chức năng của hoạt động như là những cặp giá trị tên Khi bắt đầu hoạt động lại một lần nữa, Bundle chuyển qua cả hai đến onCreate () và tới một phương thức được gọi sau onStart (), onRestoreInstanceState (), để cho một hoặc cả hai trong số chúng

có thể tái tạo lại trạng thái

Không giống như onPause () và các phương thức thảo luận trước, onSaveInstanceState () và onRestoreInstanceState () không phải là phương thức lifecycle

Nó không phải luôn luôn được gọi Ví dụ, các cuộc gọi Android onSaveInstanceState () trước khi hoạt động trở nên dễ bị tổn thương do bị tiêu diệt bởi hệ thống, nhưng không được gọi khi thực sự bị tiêu diệt bởi hành động người sử dụng (như là nhấn phím BACK) Trong trường hợp đó, người sử dụng sẽ không mong đợi để trở lại hoạt động, do đó, không có lý do chính đáng để lưu các trạng thái

Bởi vì onSaveInstanceState () không phải lúc nào cũng được gọi, bạn nên sử dụng

nó chỉ để ghi lại các trạng thái tạm thời của các hoạt động, không phải lưu dữ liệu Sử dụng onPause () cho mục đích thay thế

Coordinating activities(Phối hợp các activity)

Khi một activity bắt đầu một trong những activity khác Một cái tạm ngừng và có thể dừng lại, trong khi một cái khác khởi động Thỉnh thoảng, bạn có thể cần phải phối hợp các activity này, với activity khác

Thứ tự của lifecycle :

1 Các activity hiện tại của phương thức onPause () được gọi

Trang 35

2 Tiếp theo, bắt đầu các activity của onCreate (), onStart (), và onResume () được gọi là phương thức trong chuỗi

3 Sau đó, nếu như bắt đầu activity không còn nhìn thấy trên màn hình, các phương thức onStop () được gọi

Service lifecycle

Một dịch vụ có thể được sử dụng trong hai cách sau:

• Có thể bắt đầu và được cho phép để chạy cho đến khi một ai đó dừng nó lại hoặc tự nó dừng lại Trong chế độ này, nó bắt đầu bằng cách gọi Context.startService () và dừng lại bằng cách gọi Context.stopService () Nó có

Service.stopSelfResult () Chỉ có gọi stopService() là để ngăn chặn dịch vụ này, bất kể có bao nhiêu lần startService () đã được gọi

• Nó có thể được lập trình vận hành bằng cách sử dụng một interface mà nó định nghĩa Client thiết lập một kết nối cho các đối tượng Dịch vụ và sử dụng để kết nối cuộc gọi vào các dịch vụ Kết nối được thiết lập bằng cách gọi Context.bindService(), và được đóng lại bằng cách gọi Context.unbindService () Nhiều client có thể ràng buộc vào cùng một dịch vụ Nếu các dịch vụ chưa được đưa ra, bindService() có thể tùy chọn khởi chạy nó

Hai chế độ không hoàn toàn riêng biệt Bạn có thể kết nối vào một dịch vụ được bắt đầu với startService() Ví dụ, một dịch vụ âm nhạc có thể được bắt đầu bằng cách gọi startService() với một đối tượng nhận dạng âm nhạc để chơi Chỉ sau này, có thể là khi người dùng muốn thực hiện một số kiểm soát đối với máy nghe nhạc hoặc nhận được thông tin về các bài hát hiện nay, một hoạt động thiết lập một kết nối vào dịch vụ bằng cách gọi bindService() Trong trường hợp như thế này, stopService() sẽ không thực sự ngưng các dịch vụ cho đến khi các ràng buộc cuối cùng được đóng lại

Giống như một activity, một service có phương thức lifecycle có thể triển khai việc giám sát các thay đổi các trạng thái Nhưng nó đang có ít hơn các phương thức hoạt động - chỉ có ba - và chúng là public, không được bảo vệ:

void onCreate()

void onStart(Intent intent)

void onDestroy() Bằng cách triển khai các phương thức này, ban có thể giám sát 2 vòng lặp lồng nhau của lifetime hệ thống:

• Entire lifetime(toàn bộ thời gian sống) của một dịch vụ sẽ xảy ra giữa thời gian onCreate () được gọi và thời gian onDestroy() trả về Giống như một activity, một dịch vụ thiết lập ban đầu trong onCreate (), và phát hành tất cả tài nguyên còn lại trong onDestroy () Ví dụ, một dịch vụ nghe nhạc có thể tạo ra các thread, nơi âm nhạc sẽ được phát trong onCreate (), và sau đó ngừng bài trong onDestroy ()

Trang 36

• Active lifetime(thời gian hoạt động thực sự) của một dịch vụ bắt đầu với gọi đến onStart () Phương thức này là tổ chức ý định các đối tượng đã được thông qua đển startService () Các dịch vụ âm nhạc sẽ mở ý định để khám phá âm nhạc đó để chơi, và bắt đầu phát

Không có giá trị tương đương khi gọi các dịch vụ ngừng - không có phương thức onStop ().Phương thức onCreate () và onDestroy () được gọi cho tất cả các dịch vụ, cho dù nó đang bắt đầu bởi Context.startService () hoặc Context.bindService () Tuy nhiên, onStart () được gọi là chỉ cho các dịch vụ bắt đầu của startService ().Nếu một dịch vụ cho phép những người khác ràng buộc vào nó, có thêm các phương thức gọi cho nó, để thực hiện:

IBinder onBind (Intent Intent) boolean onUnbind (Intent Intent) void onRebind (Intent Intent) Dưới đây là những biểu đồ minh hoạ việc gọi các phương thức cho một dịch

vụ Mặc dù, nó tương tự dịch vụ được tạo ra thông qua startService từ những dịch

vụ được tạo ra bởi bindService (), hãy ghi nhớ rằng bất cứ dịch vụ, không có vấn

đề như nó đã bắt đầu, có thể cho phép khách hàng có tiềm năng ràng buộc vào nó,

do đó, bất cứ dịch vụ nào đều có thể nhận được onBind () và onUnbind () gọi

Trang 37

dcast nhận đeceive(Contthông điệp

đi chuyển qvity chỉ khi vity

trình với mộtrình khôngnhớ nó tiêu ttrình bày m

ó, nên đượcành phần k

u đó trở về,ộng (trừ khi

nó được th

ột kích hoạ

g hoạt độngthụ là cần thmột vấn đề k

c thực hiệnkhác của int, toàn bộ qucác thành p

đời của serv

ng thức cuộ

ntext, Intent

t đến với n

ng intent cóhực hiện ph

t broadcast

g có thể tắthiết đối vớikhi trả lời m

n trong một terface ngư

uá trình, baophần ứng d

t receiver đưcác thành p

i của tiến trmột thông bthread riênười dùng ch

o gồm các dụng đang h

tMsg)

n, Android thông điệp

này Khi onược bảo vệ phần của hrình khác

báo broadca

ng biệt, cáchạy Nếu onthread mớihoạt động tr

d gọi phươnbroadcast rnReceive ()

khỏi bị tắt

hệ thống vào

ast thì thời g

ch xa nhữngnReceive ()

i, để được prong tiến trì

ng thức receiver ) trả lại,

Nhưng

o bất kỳ

gian vẫn

g thread ) sinh ra phán xét ình), đặt

Trang 38

nó trong nguy cơ bị tắt Các giải pháp cho vấn đề này là dành cho onReceive ()bắt đầu một dịch vụ và để cho các dịch vụ làm công việc, do đó, hệ thống biết rằng vẫn còn hoạt động, công việc đang được thực hiện trong tiến trình

Processes và lifecycles

Các hệ thống Android cố gắng duy trì một tiến trình ứng dụng càng lâu càng tốt, nhưng cuối cùng, nó sẽ cần phải loại bỏ các tiến trình cũ khi chạy bộ nhớ thấp Để xác định các tiến trình để giữ và để tắt, Android ,nơi mỗi một tiến trình ở trong một

“inportance hierachi” dựa trên các thành phần hoạt động trong nó, và trạng thái của những thành phần Các tiến trình với tầm quan trọng thấp nhất là loại bỏ đầu tiên, sau đó các phần kế tiếp, và trên cùng Có năm cấp độ trong hệ thống Dưới đây là những danh sách trình bày chúng theo thứ tự tầm quan trọng:

1 Một tiến trình foreground là một trong những quá trình đó là những gì cần thiết cho người sử dụng hiện nay đang làm Một quá trình được coi trong foreground nếu có bất kỳ các điều kiện sau đây :

• Đó là một activity đang chạy mà người sử dụng tương tác được với nó(các hoạt động của đối tượng phương thức onResume () được gọi)

• Nó lưu trữ một dịch vụ ràng buộc với các activity tương tác với người sử dụng

• Nó có một đối tượng dịch vụ thực hiện một trong các lifetime callbacks (onCreate (), onStart (), hoặc onDestroy ())

• Nó có một đối tượng BroadcastReceiver thực hiện các phương thức onReceive ()

Chỉ có một vài tiến trình foreground sẽ tồn tại ở bất kỳ thời điểm nào Nó bị tắt chỉ

là một cách cuối cùng – nếu bộ nhớ thấp nó không thể tiếp tục chạy tất cả Thông thường,

ở đó, đã đạt đến một trạng thái phân mảnh bộ nhớ , để tắt một số tiến trình foreground cần thiết để giữ cho người dùng giao diện đáp ứng

2 Tiến trình visible là một trong những tiến trình mà không có bất kỳ foreground thành phần, nhưng vẫn còn có thể ảnh hưởng đến những gì người dùng thấy trên màn hình Một quá trình được coi là nhìn thấy nếu một trong các điều kiện sau đây có:

• Lưu trữ một activity mà không có trong foreground, nhưng vẫn còn hiển thị cho người sử dụng (các onPause () đã được gọi là phương thức) Điều này có thể xảy ra, ví dụ, nếu các hoạt động foreground là một hộp thoại mà cho phép các hoạt động trước đó để được nhìn thấy đằng sau nó

• Lưu trữ một dịch vụ bị ràng buộc vào một hoạt động nhìn thấy được

tiến trình Visible được xem là vô cùng quan trọng và sẽ không bị tắt, trừ khi làm như vậy là cần thiết để giữ tất cả các tiến trình foreground chạy

3 Tiến trình Service là một trong những dịch vụ hoạt động được bắt đầu với phương thức startService () mà không rơi vào một trong hai thể loại cao hơn Mặc dù các tiến trình dịch vụ không được gắn trực tiếp vào bất cứ điều gì cho người dùng thấy, nó thường làm những gì người sử dụng quan tâm (ví dụ như chơi một trong những nền mp3 hoặc tải dữ liệu trên mạng), vì vậy giữ cho hệ thống đang chạy trừ khi nó không đủ bộ nhớ để lưu giữ chúng cùng với tất cả các foreground và nhìn thấy được các tiến trình

4 Tiến trình Background là một quá trình tổ chức hoạt động không thể nhìn thấy cho người sử dụng (các hoạt động của đối tượng của phương thức onStop () được gọi )

Trang 39

Những tiến trình không có tác động trực tiếp trên sự trải nghiệm của người dùng, và có thể tắt bất cứ lúc nào để tái lâp bộ nhớ cho một foreground, nhìn thấy được, hoặc dịch vụ

xử lý Thông thường có nhiều tiến trình background đang hoạt động, do đó, chúng được lưu giữ trong một LRU (ít nhất trong thời gian gần được sử dụng) trong danh sách để bảo đảm rằng quá trình với các hoạt động gần nhất đã được xem bởi người sử dụng cuối cùng

sẽ được tắt Nếu một activity thực hiện lifecycle một cách chính xác các phương thức, và hiện nay nắm bắt các trạng thái, tắt tiến trình của nó sẽ không có một ảnh hưởng có hại đến sự trải nghiệm của người dùng

5 Tiến trình empty là một trong những tiến trình mà không bất kỳ thành phần ứng dụng nào khởi động Chỉ có lý do gì để giữ như vậy là một quá trình xung quanh như một

bộ nhớ cache để cải thiện thời gian khởi động tới một thành phần cần thiết để chạy trong

nó Hệ thống này thường xuyên tắt các tiến trình để cân bằng tổng thể hệ thống tài nguyên giữa các quá trình caches và các hạt nhân caches

Android sắp xếp một tiến trình ở mức cao nhất có thể, dựa trên tầm quan trọng của các thành phần hiện đang hoạt động trong tiến trình Ví dụ, nếu tiến trình tổ chức một dịch vụ lưu trữ và hiển thị các hoạt động, tiến trình này sẽ được xếp hạng như là một tiến trình nhìn thấy được, không phải là một tiến trình dịch vụ

Ngoài ra, thứ hạng của một tiến trình có thể được tăng lên bởi vì các tiến trình phụ thuộc vào nó Một quá trình đó là quá trình phục vụ khác có thể không bao giờ được xếp hạng thấp hơn đó là tiến trình phục vụ Ví dụ, nếu một nhà cung cấp dịch vụ nội dung trong quá trình A là một phục vụ khách hàng trong quá trình B, hoặc nếu một dịch vụ trong tiến trình A là ràng buộc với một thành phần trong tiến trình B, một tiến trình sẽ luôn luôn được xem xét ít nhất là điều quan trọng là tiến trình B

Trang 40

Chương III : Trình bày một số công cụ lập trình trên Android

1.1 Bộ công cụ phát triển android sdk và plugin (ADT) cho Eclipse

Bộ công cụ Android SDK bao gồm một tập hợp các công cụ dùng để phát triển, kiểm lỗi code ứng dụng và thiết kế các giao diện của ứng dụng Bộ mô phỏng Android, khi được khởi động nó sẽ hiển thị toàn bộ giao diện bao gồm cả các nút bấm và bàn phím QWERTY Nó có thể hoạt động tốt tương tự như thiết bị thật dù cho các một vài giới hạn (ví dụ như không nhận được cuộc gọi đến) Bộ mô phỏng Android chạy một phiên bản đã được sửa đổi của môi trường giả lập mã nguồn mở thuộc Fabrice Bellard, có tên là QEMU Phiên bản này giả lập một vi xử lý ARM và thực thi hệ điều hành Linux

eclipse cho phép bạn thiết lập một project android , tạo một ứng dụng UI , thêm vào các thành phần cơ bản trong framework api của android , kiểm lỗi ứng dụng của bạn sử dụng

động một dự án mới và plugin sẽ xây dựng các tập tin Java nền tảng, tạo ra những thư

dịch, chuyển đổi sang dex, mở bộ mô phỏng, và tải về Bởi vì việc viết mã Android cũng chính là viết mã Java, nên nhà phát triển có thể vận hành như thể đang xây dựng một ứng dụng Java thông thường Các tập tin nguồn được viết bằng XML cũng dễ dàng được quản

lý bởi trình biên tập XML có sẵn trong Eclipse Android giới thiệu một đặc điểm hoàn toàn mới khiến các nhà phát triển phải ghi nhớ đó chính là Activity Với Activity, bạn có thể xác định một hay nhiều góc nhìn Một góc nhìn tương đương với một khu vực trên màn hình và quản lý những thao tác diễn ra trên khu vực đó

1.1.1 Cài đặt Android SDK và plugin (ADT) cho Eclipse

Sau khi download bộ công cụ sdk về giải nén file zip đó vào vị trí dễ nhớ , file zip

đó sau khi giải nén sẽ có tên là android-sdk-<platform>-<release> ví dụ bạn down bộ sdk phiên bản 1.5_r3 cho windows thì tên thư mục được giải nén ra là android-sdk-windows-1.5_r3 bạn có thể thay đổi tùy theo ý thích

1 Ở đây ta ví dụ đặt tên thư mục đó là Android cho dễ nhớ và đặt nó ở

“C:/Android” sau đó ta cần tham chiếu biến môi trường đến thư mục “C:/Android/tools”

Chuột phải vào My Computer, trên menu chuột phải, chọn Properties, xuất hiện hộp

Ngày đăng: 26/05/2014, 19:04

HÌNH ẢNH LIÊN QUAN

Hình 1.2: Các thành phần trong liên minh OHA - thiết kế phần mềm tìm kiếm trên bản đồ số của google maps dựa trên nền tảng android dành cho điện thoại di động
Hình 1.2 Các thành phần trong liên minh OHA (Trang 13)
Hình 1.4 : HTC Dream (G1 - thiết kế phần mềm tìm kiếm trên bản đồ số của google maps dựa trên nền tảng android dành cho điện thoại di động
Hình 1.4 HTC Dream (G1 (Trang 16)
Hình 2.2 : Sơ đồ lớp IBinder - thiết kế phần mềm tìm kiếm trên bản đồ số của google maps dựa trên nền tảng android dành cho điện thoại di động
Hình 2.2 Sơ đồ lớp IBinder (Trang 28)
Hình 2 ver lifecycle - thiết kế phần mềm tìm kiếm trên bản đồ số của google maps dựa trên nền tảng android dành cho điện thoại di động
Hình 2 ver lifecycle (Trang 37)
Hình 3.1 : Hộp thoại Environment Variables - thiết kế phần mềm tìm kiếm trên bản đồ số của google maps dựa trên nền tảng android dành cho điện thoại di động
Hình 3.1 Hộp thoại Environment Variables (Trang 41)
Bảng dưới đây tóm tắt các ánh xạ giữa các phím Emulator và các phím trên bàn phím của - thiết kế phần mềm tìm kiếm trên bản đồ số của google maps dựa trên nền tảng android dành cho điện thoại di động
Bảng d ưới đây tóm tắt các ánh xạ giữa các phím Emulator và các phím trên bàn phím của (Trang 49)
Hình 3.4 : Giao diện thực thi của ứng dụng Hello World - thiết kế phần mềm tìm kiếm trên bản đồ số của google maps dựa trên nền tảng android dành cho điện thoại di động
Hình 3.4 Giao diện thực thi của ứng dụng Hello World (Trang 74)
Hình 3.7:Tạo dự án AppMapView - thiết kế phần mềm tìm kiếm trên bản đồ số của google maps dựa trên nền tảng android dành cho điện thoại di động
Hình 3.7 Tạo dự án AppMapView (Trang 80)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

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

w