Tải bản đầy đủ (.docx) (63 trang)

xây dựng ứng dụng đóng học phí dựa trên điện thoại thông minh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.62 MB, 63 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
──────── * ───────
ĐỒ ÁN
TỐT NGHIỆP ĐẠI HỌC
NGÀNH CÔNG NGHỆ THÔNG TIN
XÂY DỰNG ỨNG DỤNG ĐÓNG HỌC PHÍ
DỰA TRÊN NỀN ANDROID
Sinh viên thực hiện : Lê Thiên Sơn
Lớp cnpm – K51
Giáo viên hướng dẫn: Ths Đỗ Văn Uy
HÀ NỘI 05-2011
PHIẾU GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
1. Thông tin về sinh viên
Họ và tên sinh viên: Lê Thiên Sơn.
Điện thoại liên lạc 01656093689 Email:
Lớp: Công nghệ phần mềm B Hệ đào tạo: Chính quy
Đồ án tốt nghiệp được thực hiện tại: : Bộ môn Công nghệ phần mềm, Viện CNTT &
Truyền thông, Đại học Bách Khoa Hà Nội
Thời gian làm ĐATN: Từ ngày 15/ 01/2011 đến 27 /05/2011
2. Mục đích nội dung của ĐATN
Tìm hiểu hệ điều hành Android và xây dụng ứng dụng đóng học phí qua điện thoại di
động.
3. Các nhiệm vụ cụ thể của ĐATN
- Tìm hiểu hệ điều hành Android
- Xây dựng ứng dụng đóng học phí qua điện thoại di động
- Bảo mật hệ thống
4. Lời cam đoan của sinh viên:
Tôi Lê Thiên Sơn cam kết ĐATN là công trình nghiên cứu của bản thân tôi dưới sự hướng
dẫn của Ths Đỗ Văn Uy.
Các kết quả nêu trong ĐATN là trung thực, không phải là sao chép toàn văn của bất kỳ


công trình nào khác.
Hà Nội, ngày 27 tháng 05 năm2011
Tác giả ĐATN
Lê Thiên Sơn
5. Xác nhận của giáo viên hướng dẫn về mức độ hoàn thành của ĐATN và cho phép bảo
vệ:
Hà Nội, ngày 27 tháng 05 năm 2011
Giáo viên hướng dẫn
Ths Đỗ Văn Uy
MỤC LỤC
TÓM TẮT NỘI DUNG ĐỒ ÁN TỐT NGHIỆP
Nội dung đồ án tốt nghiệp gồm ba chương lớn:
Chương 1: Tổng quan về Android
• Trình bày các khái niệm cơ bản, các tính năng của Android
• Framework xây dựng ứng dụng của Android.
• Công cụ dùng để phát triển các ứng dụng Android
Chương 2: Nội dung bài toán đóng học phí qua điện thoại di động và các yêu cầu của nó
• Phát biểu bài toán
• Mô tả quá trình nghiệp vụ
• Đặc tả các yêu cầu chức năng và phi chức năng của chương trình
Chương 3: Xây dựng hệ thống
• Phân tích hệ thống
• Thiết kế hệ thống
• Cài đặt hệ thống
• Kiểm thử hệ thống
ABSTRACT OF THESIS
The content of this thesis is divided into three parts:
Part 1: Overview about Android
• Basic definitions and properties of Android
• Framework of building applications in Android

• Tools for developing applications in Android
Part 2: Paying tuition problem and its specification
• Defining paying tuition problem
• Describing the business of paying tuition
• Funtionalitiy and non-funtionalitiy specifications
Part 3: Develop paying tuition system
• Analysizing this system
• Designing this system
• Coding this system
• Testing this system
DANH MỤC CÁC TỪ VIẾT TẮT
STT Viết tắt/thuật ngữ Giải nghĩa
1 CNTT Công nghệ thông tin
2 ITuition Hệ thống đóng học phí qua điện thoại di động
3 Use case Trường hợp sử dụng/ca sử dụng
4 CSDL Cơ sở dữ liệu
5 Module Một bộ phận của chương trình
5 User Người dùng trong hệ thống
DANH MỤC CÁC HÌNH
DANH MỤC CÁC BẢNG
LỜI NÓI ĐẦU
Ngày nay, cùng với sự phát triển mạnh mẽ của công nghệ thông tin, thế
giới đã chứng kiến rất nhiều thành tựu to lớn, các cuộc cách mạng trong nhiều
lĩnh vực mà nhân tố quan trọng trong đó chính là việc ứng dụng công nghệ thông
tin. Song song với các phần mềm dành cho doanh nghiệp, các phần mềm dành
cho điện thoại di động cũng được phát triển một cách mạnh mẽ. Nhu cầu của con
người đối với các thiết bị di động cũng không còn giới hạn trong việc nghe gọi và
nhắn tin như trước, mà vươn cao hơn tới các tiện ích của các dịch vụ. Xuất phát từ
nhu cầu đó, hệ thống đóng học phí qua điện thoại –Ituition được ra đời. Hệ thống
cung cấp các dịch vụ như: đóng học phí, kiểm tra học phí, lịch sử học phí dễ dàng

tiện lợi cho người dùng.
Trong đồ án này, tôi xin trình bày những công nghệ tôi đã sử dụng, lý thuyết
chung về hệ điều hành Androd cũng như các bước để xây dựng phần mềm: Phân
tích, thiết kế, cài đặt và kiểm thử hệ thống. Trong khoảng thời gian 3 tháng làm đồ
án, với sự hạn chế về kinh nghiệm, sản phẩm của tôi vẫn chưa thể hoàn thiện, đặc
biệt trong việc tối ưu hệ thống để đạt hiệu suất cao cũng như có thể dáp ứng được
với số lượng kết nối lơn. Tôi hy vọng sẽ có thể cải thiện được sản phẩm cũng như
tìm hiểu những công nghệ mới để có thể đáp ứng được tốt hơn những nhu cầu của
cả hệ thống.
Tôi xin được gửi lời cảm ơn tới các thầy cô trong viện Công Nghệ Thông Tin và
Truyền Thông, Trường Đại Học Học Bách Khoa Hà Nội, đặc biệt tôi xin gửi lời
cảm ơn tới thầy thầy Đỗ Văn Uy đã tận tình hướng dẫn và định hướng cho tôi
trong suốt quá trình thực hiện đồ án này. Đồng thời tôi xin được gửi lời cảm ơn
tới gia đình, bạn bè đã cổ vũ, động viên, đóng góp ý kiến và giúp đỡ rất nhiều
trong thời gian qua.
CHƯƠNG 1: TỔNG QUAN VỀ ANDROID
1. Tổng quan về Android
1.1 Khái niệm Android
Android là một nền tảng mở dành cho thiết bị di động của Google, bao
gồm hệ điều hành, middleware và một số ứng dụng cơ bản. Android SDK cung
cấp các công cụ và API cần thiết để phát triển ứng dụng trên nền tảng Android sử
dụng ngôn ngữ lập trình Java.
1.2 Tính năng cơ bản của Android
- Ứng dụng framework cho phép tái sử dụng và thay thế các thành phần
- Máy ảo Dalvik được tối ưu hóa cho thiết bị di động.
- Tích hợp trình duyệt dựa trên công cụ mã nguồn mở WebKit
- Đồ họa được tối ưu hóa, hỗ trợ bởi thư viện đồ họa tùy chỉnh 2D, 3D dựa trên
đặc điểm của OpenGL ES 1,0
- Cơ sở dữ liệu SQLite để lưu trữ dữ liệu có cấu trúc
- Hỗ trợ phương tiện cho âm thanh phổ biến, video, và định dạng hình ảnh

(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
- Điện thoại GSM (phụ thuộc phần cứng)
- Bluetooth, EDGE, 3G, và WiFi (tùy thuộc phần cứng)
- Camera, GPS, la bàn, và gia tốc (tùy thuộc phần cứng)
- Môi trường phát triển đa dạng gồm: 1 bộ mô phỏng, công cụ gỡ lỗi, plugin
cho Eclipse IDE…
1.3 Kiến trúc Android
Sơ đồ dưới đây cho thấy các thành phần chính của hệ điều hành Android.
Các thành phần này được mô tả chi tiết trong các mục sau (d,e,f,g,h,i).
Hình :Kiến trúc Android
1.4 Các ứng dụng trên Android
Các ứng dụng cơ bản bao gồm: email, nhắn tin SMS, lịch, bản đồ, trình
duyệt, liên lạc, Các ứng dụng đều được viết bằng ngôn ngữ Java.
1.5 Framwork ứng dụng
Bằng cách cung cấp một nền tảng phát triển mở, Android cung cấp cho
các nhà phát triển khả năng xây dựng các ứng dụng cực kỳ phong phú và sáng
tạo. Nhà phát triển được tự do tận dụng lợi thế của phần cứng, truy cập thông
tin về địa điểm, chạy các dịch vụ trên background, báo thức, …
Nhà phát triển có thể truy cập vào các API cùng một Framework sử dụng
bởi các ứng dụng cơ bản. Kiến trúc của ứng dụng được thiết kế để đơn giản hóa
việc sử dụng lại các thành phần; bất kỳ ứng dụng nào cũng có thể sử dụng lại
chức năng của một ứng dụng khác (nếu cho phép). Cơ chế này cho phép các
thành phần tương tự sẽ được sử dụng lại.
Về cơ bản, tất cả các ứng dụng là một tập các dịch vụ và hệ thống, bao
gồm:
- Views: Một tập phong phú các đối tượng view, có thể mở rộng, dùng để
xây dựng ứng dụng, bao gồm danh sách, mạng lưới, các text box, button, và trình
duyệt web nhúng
- Content Providers: cho phép ứng dụng truy cập vào dữ liệu của các ứng
dụng khác hoặc chia sẻ dữ liệu của chính nó.

- Resource Manager: quản lí truy cập vào các tài nguyên (không phải mã
nguồn) như các file strings, graphics, và layout
- Notification Manager: cho phép ứng dụng hiển thị thông báo tùy chỉnh
trong thanh trạng thái
- Activity Manager: quản lý vòng đời của ứng dụng, cung cấp một ngăn xếp
ngược (backstack) điều hướng thông thường
1.6 Thư viện hỗ trợ của Android
Android bao gồm một bộ thư viện C / C + + sử dụng bởi các thành phần
khác nhau của hệ thống. Các nhà phát triển sử dụng các thư viện này thông qua
các framework ứng dụng của Android.
Một số thư viện cơ bản:
- System C library (Hệ thống thư viện C): dựa trên BSD của hệ thống thư
viện C chuẩn, điều chỉnh thiết bị nhúng dựa trên Linux
- Media Libraries (Thư viện các phương tiện): dựa trên PacketVideo's
OpenCORE; thư viện hỗ trợ phát, ghi lại các âm thanh phổ biến, nhiều định dạng
video, cũng như các tập tin hình ảnh tĩnh, bao gồm MPEG4, H.264, MP3, AAC,
AMR, JPG, và PNG
- Surface Manager (quản lí bề mặt): quản lý truy cập vào các hệ thống phụ
hiển thị , phù hợp cho truy cập vào các lớp đồ họa 2D và 3D từ nhiều ứng dụng
- LibWebCore: một trình duyệt web hiện đại, hỗ trợ trình duyệt Android và
trình duyệt web nhúng
- SGL - các công cụ đồ họa 2D cơ bản
- Thư viện 3D (3D libraries): dựa trên các API của OpenGL ES 1,0, sử dụng
khả năng tăng tốc phần cứng 3D (nếu có) hoặc phần mềm tối ưu hóa 3D mức cao
- FreeType: font bitmap và vector
- SQLite: hệ cơ sở dữ liệu quan hệ nhẹ và mạnh sẵn có cho tất cả ứng dụng
1.7 Thực thi ứng dụng Android
Android bao gồm một tập các thư viện cơ bản cung cấp hầu hết các chức
năng sẵn có trong các thư viện cơ bản của Java.
Mỗi ứng dụng Android chạy trong tiến trình riêng (trên máy ảo Dalvik).

Mỗi thiết bị có thể chạy nhiều máy ảo tại một thời điểm. Máy ảo Dalvik thực thi
các file trong định dạng .dex (được tối ưu hóa cho bộ nhớ tối thiểu). Các lớp ban
đầu được biên soạn bởi trình biên dịch ngôn ngữ Java khi thực thi được chuyển
đổi thành các định dạng .dex ( bởi công cụ “dx”).
Máy ảo Dalvik dựa trên nền hạt nhân Linux, hỗ trợ các chức năng cơ bản
như quản lí luồng và bộ nhớ mức thấp.
1.8 Nhân Linux của Android
Android dựa trên nền Linux phiên bản 2.6, cung cấp các dịch vụ cơ bản cho
hệ thống như bảo mật, quản lý bộ nhớ, quản lý tiến trình, network stack, và mô
hình điều khiển. Hạt nhân cũng hoạt động như một lớp trừu tượng giữa phần
cứng và phần mềm.
2. Framework xây dựng ứng dụng trên Android
2.1 Các thành phần của một ứng dụng
Một đăc trưng trọng tâm của Android là mỗi ứng dụng có thể sử dụng lại
các thành phần của các ứng dụng khác (nếu cho phép). Để được như vậy, hệ
thống phải khởi tạo một tiến trình bất cứ khi nào ứng dụng cần đến, đồng thời
khởi tạo các đối tượng Java cho phần đó. Vì vậy, không giống như ứng dụng trên
hầu hết các hệ thống khác, ứng dụng Android không có điểm vào duy nhất cho
ứng dụng (không có hàm main ()). Thay vào đó, ứng dụng có các thành phần mà
hệ thống có thể tạo ra và thực thi khi cần thiết.
Có bốn thành phần của một ứng dụng:
2.1.1 Activities:
Mỗi activity tạo ra một giao diện trực quan tương tác với người dùng. Các
activity có thể thực thi cùng nhau để tạo một giao diện người dùng cố kết, nhưng
các activity này độc lập với nhau. Mỗi activity là một lớp con của lớp cơ sở
Activity.
Một ứng dụng có thể gồm một hay nhiều activity. Các activity là gì, số lượng
bao nhiêu phụ thuộc vào việc thiết kế ứng dụng. Thông thường, activity đầu tiên
tạo ra cho người dùng là khi ứng dụng được khởi chạy. Có thể bắt đầu activity kế
tiếp từ activity hiện tại.

Mỗi activity có 1 cửa sổ mặc định để hiển thị. Thông thường, cửa sổ này lấp đầy
màn hình, cũng có thể nhỏ hơn và nổi trên cửa sổ khác. Activity cũng có thể tận
dụng các cửa sổ bổ sung .
Nội dung hiển thị trên cửa sổ này thể hiện qua cây phân cấp các đối tượng
view - dẫn xuất từ lớp cơ sở View. Mỗi đối tượng view chiếm một không gian cụ
thể (hình chữ nhật) trong cửa sổ. Không gian hiển thị của đối tượng cha là tổng
hợp không gian của các đối tượng con. Các đối tượng “lá” của cây hiển thị trong
không gian nó kiểm soát và đáp lại yêu cầu của người dùng trên không gian đó.
Vì vậy, view là đối tượng trung gian trong tương tác giữa người dùng với thành
phần activity của ứng dụng. Android cung cấp một số đối tượng view sẵn có để
sử dụng - bao gồm buttons, các trường text, thanh cuộn, menu, check box,…
Đối tượng view hiển thị trong cửa sổ của activity bởi phương thức
Activity.setContentView (). Cửa sổ hiển thị là không gian kiểm soát của đối tượng
View tại gốc của cây phân cấp trên.
2.1.2 Service
Service không có giao diện người dùng, mà chạy nền trong một khoảng
thời gian không giới hạn. Ví dụ: 1 service có thể bật nhạc nền khi người dùng
quan tâm đến các vấn đề khác, hoặc có thể lấy dữ liệu qua mạng hay tính toán
một cái gì đó và cung cấp kết quả cho các activity cần nó. Mỗi service là mở rộng
của lớp cơ sở Service.
Có thể kết nối một service đang diễn ra (và bắt đầu service nếu nó chưa
có). Trong khi kết nối, có thể giao tiếp với service thông qua giao diện mà nó hỗ
trợ. Đối với service âm nhạc, giao diện này cho phép người dùng tạm dừng, tua,
dừng lại, khởi động, hay phát lại.
Cũng giống như activity và thành phần khác, service chạy trong luồng
chính của tiến trình ứng dụng. Vì vậy, để không chặn các thành phần khác hay
chặn giao diện người dùng, chúng thường sinh ra các luồng (cho các nhiệm vụ
tiêu tốn thời gian)
2.1.3 Broadcast receivers
Thành phần receivers thực hiện nhận và phát đi các thông báo. Nhiều

chương trình receivers được tích hợp trong mã nguồn hệ thống - ví dụ, thông báo
các múi giờ đã thay đổi, pin thấp, hình ảnh đã được chụp, hoặc để người sử dụng
thay đổi tuỳ chọn ngôn ngữ. Ứng dụng cũng có thể khởi tạo trình receivers - ví
dụ, báo cho các ứng dụng khác biết rằng một số dữ liệu đã được tải về cho thiết
bị và sẵn có cho họ sử dụng.
Mỗi ứng dụng có số lượng thành phần receivers tùy ý (đáp ứng các thông báo
quan trọng). Lớp receiver là mở rộng của lớp cơ sở BroadcastReceiver.
Thành phần receiver không có giao diện với người dùng. Tuy vậy, thành phần
này có thể bắt đầu một activity để đáp ứng thông tin mà nó nhận được, hoặc có
thể sử dụng NotificationManager để cảnh báo người sử dụng. Các thông báo gây
sự chú ý của người dùng bằng nhiều cách khác nhau - nhấp nháy đèn nền, rung
thiết bị, tạo một âm thanh, vv. Và thường đặt một biểu tượng trên thanh trạng
thái, người dùng có thể mở để nhận thông báo.
2.1.4 Content providers
Thành phần Content providers tạo một bộ dữ liệu của ứng dụng sẵn có
cho các ứng dụng khác. Dữ liệu có thể lưu trữ trong hệ thống tệp, cơ sở dữ liệu
SQLite, Lớp content provider là mở rộng của lớp cơ sở ContentProvider, thực
thi tập các phương thức chuẩn, để các ứng dụng khác có thể lấy, lưu trữ dữ liệu
theo cách riếng. Tuy vậy, các ứng dụng không gọi các phương thức đó trực tiếp.
Nó sử dụng đối tượng ContentResolver để gọi. Đối tượng ContentResolver có thể
giao tiếp với bất kỳ lớp content provider nào, nó cùng với lớp Provider thực thi
quản lý bất kỳ giao tiếp nào bên trong tiến trình nào nó tham gia.
Bất cứ khi nào có yêu cầu cần được xử lý bởi một thành phần đặc biệt,
Android đảm bảo tiến trình ứng dụng của thành phần đó đang thực thi (hoặc
khởi tạo nó nếu cần thiết), và các đối tượng thích hợp của thành phần đó là sẵn
có (hoặc tạo ra đối tượng nếu cần thiết).
Kích hoạt các thành phần: intents
Các thành phần content provider được kích hoạt khi nhận yêu cầu từ
ContentResolver. Ba thành phần khác - activity, service và Broadcast receivers -
được kích hoạt bởi các thông điệp không đồng bộ intents. Mỗi intent là một đối

tượng chứa nội dung thông điệp. Đối với service và activity, nó chỉ định activity
được yêu cầu và định rõ URI của dữ liệu để thao tác trên đó. Với thành phần
Broadcast receivers, đối tượng Intent chỉ định hành động đang được thông báo.
Có nhiều phương pháp kích hoạt riêng cho từng loại thành phần:
- Một activity được khởi tạo bằng cách truyền một đối tượng Intent vào
phương thức Context.startActivity () hoặc Activity.startActivityForResult
().Phương thức getIntent() của 1 hoạt động trả về đối tượng intent kích hoạt
hoạt động đó.Android gọi phương thức onNewIntent () của hoạt động và truyền
cho nó bất kỳ đối tượng intents nào tiếp theo.
- Một activity thường bắt đầu các activity kế tiếp. Nếu activity kế tiếp là
lấy kết quả từ activity trước đó, nó gọi startActivityForResult () thay vì
startActivity (). Kết quả trả về là đối tượng Intent qua lời gọi phương thức
onActivityResult()
- Một service được bắt đầu bằng cách truyền một đối tượng Intent vào
phương thức Context.startService (). Android gọi phương thức onStart () của
service thông qua đối tượng Intent.
Tương tự, đối tượng intent có thể được truyền vào phương thức
Context.bindService () để thiết lập một kết nối liên tục giữa các thành phần đang
gọi và service mục tiêu. Service này nhận được đối tượng intent qua lời gọi
onBind()
- Một ứng dụng có thể khởi tạo Broadcast receivers bằng cách truyền một đối
tượng Intent vào các phương thức như Context.sendBroadcast (),
Context.sendOrderedBroadcast (), và Context.sendStickyBroadcast (). Android
phân phát đối tượng intent cho tất cả các lớp thu phát liên quan bằng cách gọi
phương thức onReceive()
Tắt các thành phần :
- Một hoạt động có thể được tắt bằng cách gọi phưong thức finish() của nó.
Một activity có thể tắt các activity khác bằng cách gọi finishActivity ().
- Service có thể được ngừng lại bằng cách gọi phương thức stopSelf(), hoặc
gọi Context.stopService ().

Các thành phần cũng có thể được tắt bởi hệ thống khi không còn được sử
dụng hoặc để lấy bộ nhớ cho nhiều thành phần khác đang hoạt động.
Các tập tin manifest :
Các ứng dụng khai báo các thành phần của nó trong tập tin manifest đặt
trong gói Android. Các file. apk chứa code, các file và tài nguyên của ứng dụng.
Tập tin manifest là một cấu trúc file XML có tên AndroidManifest.xml trong mọi
ứng dụng.
Nhiệm vụ chính của file manifest là để khai báo thành phần ứng dụng
của Android. Một hoạt động có thể được khai báo như sau:
<?xml version="1.0" encoding="utf-8"?>
<manifest . . . >
<application . . . >
<activity android:name="com.example.project.FreneticActivity"
android:icon="@drawable/small_pic.png"
android:label="@string/freneticLabel"
. . . >
</activity>
. . .
</application>
</manifest>
Thuộc tính “name” của <activity> chỉ định lớp con thực thi hoạt động
Thành phần <service> khai báo cho các service, các yếu tố <receiver> cho
Broadcast receivers, và <provider> yếu tố cho content provider.
Bộ lọc Intent:
Bộ lọc Intent của một thành phần cho Android biết các loại intents mà
thành phần đó có khả năng xử lý. Chúng được khai báo trong tập tin manifest. Ví
dụ sau thêm hai bộ lọc vào hoạt động:
<?xml version="1.0" encoding="utf-8"?>
<manifest . . . >
<application . . . >

<activity android:name="com.example.project.FreneticActivity"
android:icon="@drawable/small_pic.png"
android:label="@string/freneticLabel"
. . . >
<intent-filter . . . >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter . . . >
<action android:name="com.example.project.BOUNCE" />
<data android:mimeType="image/jpeg" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
. . .
</application>
</manifest>
2.2 Màn hình và tác vụ
Các stack chứa các đối tượng, vì vậy nếu một task có nhiều đối tượng
của cùng một lớp con của Activity, stack có từng vùng riêng biệt cho mỗi Activity.
Các activity trong stack không bao giờ sắp xếp lại, chỉ push và pop.
Tác vụ (Task) là một ngăn xếp các activity. Vì vậy, không có cách nào
để thiết lập giá trị cho một task độc lập với activity của nó. Giá trị của task được
thiết lập trong activity gốc.
Các activity trong một task thống nhất với nhau như một đơn vị.
Tập hợp hoạt động, nhiệm vụ, và hành vi của một activity trong Task,
được điều khiển bởi sự tương tác giữa cờ đặt trong đối tượng Intent bắt đầu
hoạt động và các thuộc tính thiết lập ở thẻ <activity> trong file manifest.
Cờ Intent chủ yếu là:
FLAG_ACTIVITY_NEW_TASK

FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
FLAG_ACTIVITY_SINGLE_TOP
Thuộc tính <activity> :
taskAffinity
launchMode
allowTaskReparenting
clearTaskOnLaunch
alwaysRetainTaskState
finishOnTaskLaunch
2.3 Luồng và tiến trình.
Khi cần chạy thành phần đầu tiên của một ứng dụng, Android khởi tạo
một tiến trình Linux cho nó với một luồng đơn thực thi. Theo mặc định, tất cả các
thành phần của ứng dụng chạy trên luồng và tiến trình đó.
Tiến trình:
Tiến trình được kiểm soát bởi tập tin manifest. Các thành phần:
<activity>, <service>, <receiver>, và <provider> đều có một thuộc tính process chỉ
định tiến trình phù hợp. Thuộc tính này được thiết lập để mỗi thành phần chạy
trong tiến trình riêng, chia sẻ tiến trình, hay chạy các thành phần của các ứng
dụng khác nhau trong cùng một tiến trình. <application> có thuộc tính process,
để thiết lập giá trị mặc định áp dụng cho tất cả các thành phần.
Tất cả các thành phần được tạo ra trong luồng chính của tiến trình chỉ
định. Các thành phần không nên thực thi các hoạt động kéo dài hoặc ngăn chặn
khi được gọi bởi hệ thống. Có thể sinh các luồng riêng biệt cho các hoạt động kéo
dài.
Android có thể quyết định tắt đi một tiến trình tại một số điểm, khi dung lượng
bộ nhớ thấp và yêu cầu của tiến trình khác phục vụ ngay lập tức. Thành phần
ứng dụng đang chạy trong tiến trình đó sẽ bị hủy. Tiến trình được khởi tạo lại
cho các thành phần khi có yêu cầu.
Luồng:

Một luồng được tạo ra để thực thi một số công việc. Bất cứ hoạt động
nào tốn thời gian được đặt trong một luồng riêng. Luồng được tạo ra trong mã
nguồn bằng cách sử dụng đối tượng chuẩn Thread của Java. Android cung cấp
một số lớp thuận tiện cho việc quản lý luồng – Looper: chạy một vòng lặp thong
điệp bên trong 1 luồng, Handler: xử lí các thông điệp, và HandlerThread : lập một
luồng với một vòng lặp thông điệp.
2.4 Vòng đời các thành phần
Vòng đời của thành phần ứng dụng: từ khi Android khởi tạo chúng đến
kết thúc khi hủy các đối tượng.
Vòng đời của activity
Mỗi activity có 3 trạng thái cơ bản:
- active or running: khi đang ở trong mặt trước màn hình (ở đầu ngăn
xếp các hoạt động cho nhiệm vụ hiện hành). Đây là trạng thái activity tập trung
các hành động của người dùng.
- paused: tạm dừng, nhưng vẫn hiển thị cho người dùng. Activity bị tạm
dừng là còn “sống” (nó duy trì tất cả các trạng thái, thông tin thành phần và vẫn
thuộc cửa sổ quản lý), có thể bị hủy trong trường hợp bộ nhớ vực kì thấp.
- stopped : dừng lại (nếu bị che khuất bởi các hoạt động khác). Nó vẫn giữ lại
tất cả các trạng thái và thông tin thành phần. Nó không còn hiển thị cho người
sử dụng (cửa sổ ẩn), thường bị hủy bởi hệ thống khi có yêu cầu cần thiết về bộ
nhớ.
Quá trình chuyển đổi trạng thái hoạt động thực hiện qua lời gọi các
phương thức protected sau:
void onCreate (Bundle savedInstanceState)
void onStart ()
void onRestart ()
void onResume ()
void onPause ()
void onStop ()
void onDestroy ()

Mọi activity phải thực hiện onCreate () để khởi tạo đối tượng đầu
tiên,thực hiện onPause () để thay đổi dữ liệu và chặn tương tác với người dùng.
7 phương thức trên định nghĩa toàn bộ vòng đời của một activity
Sơ đồ minh họa vòng đời của activity
Hình :Vòng đời của Activity
Trong đó phương thức :
- onCreate(): Được gọi là khi activity tạo ra lần đầu tiên. Phương pháp này
được truyền vào một đối tượng Bundle có chứa trạng thái trước đó của activity.
Luôn theo sau bởi onStart().
- onRestart (): Được gọi sau khi activity đã dừng lại (stopped), để bắt đầu
lại.
Luôn theo sau bởi onStart ()
- onStart (): Được gọi ngay trước khi activity trở nên rõ ràng cho người
dùng.
Theo sau bởi onResume() hoặc onStop()
- onResume(): Được gọi ngay trước khi bắt đầu activity tương tác với
người sử dụng
Luôn theo sau bởi onPause ().
- onPause(): Được gọi khi hệ thống chuẩn bị bắt đầu khôi phục activity
khác. Phương thức này thường được dùng để xác nhận những thay đổi chưa
được lưu vào dữ liệu ổn định, dừng hình ảnh động Các activity tiếp theo sẽ
không được tiếp tục cho đến khi nó quay lại.
Theo sau bởi onResume() nếu trả về activity trước đó, hoặc onStop () nếu nó ẩn
với người dùng.
- onStop(): Được gọi khi activity không còn nhìn thấy được. Điều này xảy
ra bởi nó đang bị huỷ, hay vì activity khác đã được tiếp tục và bao phủ nó.
Theo sau bởi onRestart() hoặc onDestroy ()
- onDestroy(): Được gọi trước khi activity bị hủy. Đây là lời gọi cuối cùng
với một activity. Nó có thể được gọi vì activity đã hoàn thành (finish()) hoặc do
hệ thống tạm thời hủy đối tượng của activity để tiết kiệm không gian.

Vòng đời của service :
Hai cách sử dung service :
- Khởi tạo và chạy, đến khi một người dùng dừng hay tự dừng lại. Bắt đầu
bằng cách gọi Context.startService() và dừng lại bằng cách gọi
Context.stopService(). Có thể tự dừng lại bằng cách gọi Service.stopSelf() hoặc
Service.stopSelfResult().
- Hoạt động bằng cách sử dụng một giao diện tự định nghĩa và thiết lập.
Client thiết lập kết nối đến các đối tượng service và sử dụng kết nối để gọi service.
Kết nối được thiết lập bằng cách gọi Context.bindService(), và đóng lại bằng cách
gọi Context.unbindService(). Nhiều client có thể kết nối với cùng service. Nếu
chưa có service, bindService() sẽ khởi tạo service.
Các phương thức:
- void onCreate ()
- void onStart (Intent ý định)
- void onDestroy ()
Các phương thức onCreate() và onDestroy() được gọi cho tất cả các
service, cho dù bắt đầu bởi Context.startService () hay Context.bindService(). Tuy
nhiên, onStart() được gọi chỉ với các service bắt đầu bởi startService ().
Một service liên kết với các service khác bằng nhiều phương thức:
- IBinder onBind(Intent intent)
- boolean onUnbind(Intent intent)
- void onRebind(Intent intent)
Sơ đồ sau minh họa phương thức gọi một service:
Hình : Cách gọi Service trong Android
Vòng đời của receiver:
Phương thức duy nhất: void onReceive(Context curContext, Intent
broadcastMsg)
Khi một thông điệp quảng bá đến cho receiver, Android gọi phương thức
onReceive()và truyền vào các đối tượng Intent có chứa thông điệp. Receiver đang
hoạt động chỉ khi nó đang thực hiện phương thức này.

Tiến trình với receiver đang hoạt động sẽ không bị hủy.
Vòng đời của tiến trình:
Hệ thống Android sẽ duy trì một tiến trình ứng dụng càng lâu càng tốt, và
loại bỏ các tiến trình cũ khi bộ nhớ ở mức thấp. Để xác định lưu giữ, hay hủy một
tiến trình, Android thực hiện phân cấp các tiến trình theo tầm quan trọng dựa
trên các thành phần đang chạy trong nó và trạng thái của các thành phần. Đầu
tiên là các tiến trình có tầm quan trọng thấp nhất, tiếp đó các mức quan trọng
tăng dần. Có năm mức trong hệ thống. Danh sách sau trình bày các tiến trình
theo thứ tự mức quan trọng:
Foreground process (tiến trình tiền cảnh) yêu cầu cho những gì người
dùng hiện tại đang làm. Các điều kiện :
- Đang chạy một activity mà người dùng đang tương tác
- Có một service liên kết với activity mà người dùng đang tương tác.
- Có một đối tượng service gọi lại phương thức (onCreate(), onStart(),
onDestroy ().
- Có một đối tượng BroadcastReceiver gọi phương thức onReceive().
Visible process ( tiến trình có thể nhìn thấy): Một tiến trình có thể nhìn
thấy thỏa mãn các điều kiện sau:
- Có một activity trước đó, vẫn còn hiển thị cho người sử dụng (onPause()).
- Có một service lien kết với một activity nhìn thấy được.
Service process (tiến trình dịch vụ): chạy một service bắt đầu với phương
thức startService() và không thuộc một trong hai loại trên.
Background process ( tiến trình nền): mang một activity không hiện hiển
thị cho người dùng (onStop()). Các tiến trình này không có tác động trực tiếp đến
người dùng, và có thể bị hủy bất cứ lúc nào có yêu cầu lấy lại bộ nhớ. Có rất nhiều
tiến trình chạy nền, chúng được giữ trong một danh sách LRU.
Empty process ( tiến trình rỗng): không giữ thành phần ứng dụng nào
đang hoạt động. Hệ thống thường hủy các tiến trình này để cân đối tài nguyên
tổng thể của hệ thống giữa vùng nhớ tiến trình và cùng nhớ hạt nhân cơ bản.
3. Công cụ phát triển

Android SDK bao gồm nhiều công cụ phát triển ứng dụng di động trên nền
tảng Android. Quan trọng nhất là Android Emulator (Bộ mô phỏng) và Android
Development Tools plugin (plugin ADT) cho Eclipse. SDK cũng bao gồm nhiều
công cụ khác để gỡ lỗi, đóng gói, và cài đặt ứng dụng trên Emulator.
Android Development Tools Plugin (cho Eclipse IDE): Thêm các mở rộng
mạnh mẽ vào Eclipse : tích hợp môi trường, tạo và gỡ lỗi các ứng dụng Android
dễ dàng và nhanh chóng.
Android Emulator: công cụ mô phỏng thiết bị dựa trên QEMU, sử dụng để
thiết kế, gỡ lỗi, và kiểm thử các ứng dụng trong môi trường thực chạy Android.
Android Virtual Devices (AVDs): cấu hình thiết bị ảo dùng để mô hình hóa
tính năng thiết bị trong Android Emulator. Trong mỗi cấu hình, có thể chỉ định
các nền tảng Android để chạy, tùy chọn phần cứng, skin mô phỏng sử dụng.
Hierarchy Viewer (hệ thống phân cấp Viewer): cho phép gỡ lỗi, tối ưu hóa
giao diện người dùng, cung cấp hình ảnh hệ thống phân cấp Views và kiểm tra độ
phóng đại của màn hình hiện tại với một lưới pixel.
layoutopt: cho phép nhanh chóng trình bày ứng dụng hiệu quả.
Draw 9-patch: cho phép dễ dàng tạo ra một hình ảnh NinePatch sử dụng
một trình soạn thảo WYSIWYG.
Dalvik Debug Monitor Service (ddms): Tích hợp Dalvik (máy ảo tùy chỉnh
trên nền tảng Android ), cho phép quản lý các tiến trình trên bộ mô phỏng hay
thiết bị thật, hỗ trợ gỡ lỗi. Có thể sử dụng để hủy các tiến trình, lựa chọn một tiến
trình cụ thể để gỡ lỗi, đánh dấu dữ liệu, xem thông tin về heap và luồng, chụp
màn hình của bộ mô phỏng hoặc thiết bị,
Android Debug Bridge (adb): cho phép bạn cài đặt các file .apk của ứng dụng
trên bộ mô phỏng hay thiết bị thật và truy cập vào bộ mô phỏng, thiết bị đó từ
cửa sổ command line, liên kết một trình sửa lỗi chuẩn với mã ứng dụng đang
chạy trên bộ mô phỏng Android hoặc thiết bị thật.
Android Asset Packaging Tool (aapt): cho phép tạo ra các file .apk chứa
mã nhị phân và tài nguyên của ứng dụng Android.
Android Interface Description Language (aidl): Cho phép tạo mã code cho

một giao diện bên trong tiến trình (interprocess)
sqlite3 : Cho phép truy cập vào các tập tin dữ liệu SQLite - được tạo ra và
sử dụng bởi các ứng dụng Android.
Traceview: Tạo ra các views phân tích đồ họa của dữ liệu trace log có thể
tạo ra từ các ứng dụng Android.
mksdcard: Tạo một đĩa ảnh có thể sử dụng với bộ mô phỏng, mô phỏng sự
hiện diện của một thẻ lưu trữ ngoài (chẳng hạn thẻ SD).
Dx: Cho phép ghi đè bytecode .class lên bytecode Android (chứa trong
file .dex).
UI/Application Exerciser Monkey: Chương trình chạy trên bộ mô phỏng
hay thiết bị thật, tạo ra các dòng giả ngẫu nhiên của các sự kiện như người dùng
nhấp chuột, chạm vào, … kiểm tra các ứng dụng đang phát triển, một cách ngẫu
nhiên nhưng vẫn lặp lại.
Android: Đoạn mã cho phép quản lý AVDs và tạo ra file buid Ant, có thể
dùng để biên dịch các ứng dụng Android.
Zipalign: Một công cụ tối ưu hóa file .apk quan trọng. Công cụ này đảm
bảo tất cả các dữ liệu không nén bắt đầu với một liên kết cụ thể liên quan đến
phần đầu của file, thường dùng để chỉnh các tập tin .apk sau khi chúng được
đánh dấu
CHƯƠNG 2: BÀI TOÁN ĐÓNG HỌC PHÍ QUA ĐIỆN
THOẠI DI ĐỘNG DỰA TRÊN NỀN ANDROID I-TUITION
1 Phát biểu bài toán
1.1 Đặt vấn đề
- Thực trạng đóng học phí tại trường ĐHBK Hà Nội: Đối với sinh viên học
theo hình thức niên chế, thông tin học phí sẽ được thông báo ở giữa kỳ.
Việc đóng học phí thì có rất nhiều trở ngại và tốn thời gian, công việc được
thực hiện một cách thủ công. Mỗi lần sinh viên đóng học phí thì nhân viên
phòng đào tạo phải rà soát lại trong sổ sau đó viết biên lai thu nhận tiền
bằng tay. Ngoài ra thông thường sinh viên sẽ tập trung vào các ngày cuối
để đóng học phí. Điều này làm cho công việc của phòng đào tạo quá tải,

hiệu quả làm việc thấp đồng thời tốn thời gian của sinh viên.
- Cơ chế đóng học phí mới thong qua hình thức thanh toán thẻ ATM có
nhiều tiện lợi hơn. Sinh viên thay vì làm việc với phòng đào tạo, thì được
chuyển qua ngân hang. Việc đóng học phí của sinh viên được chia thành 3
đợt mỗi đợt thu 1/3 học phí. Việc thanh toán học phí thong qua thẻ ATM có
nhiều điểm ưu thế như: Thanh toán một cách tự động “Quét thẻ” do đó
hiệu quả tăng lên nhưng nhược điểm của hình thức này là sinh viên không
chủ động trong việc đóng học phí, ngoài ra để kiểm tra tình trạng học phí
của mình sinh viên phải lien hệ với ngân hang.
- Lợi ích của việc đóng học phí qua di động: Do ngày nay mạng điện thoại
được phủ sóng rất nhiều nơi do đó sinh viên hoàn toàn chủ động trong
việc đóng học phí của mình. Việc kiểm tra tài khoản, lịch sử đóng học phí
của mình rất tiện lợi. Đơn giản chỉ cần sử dụng điện thoại nhắn tin đến
dịch vụ thanh toán học phí của ngân hang.
Yêu cầu chung đối với hệ thống đóng học phí qua mạng di động như sau:
Các cá nhân phải biết được thông tin học phí
Dùng điện thoại nhắn tin đóng học phí
Người dùng phải nhận được thông tin phản hồi
1.2 Mô tả nghiệp vụ
Trước hết sinh viên phải mở tài khoản tại ngân hang. Tài khoản này chứa
thong tin của sinh viên: Số hiệu sinh viên, Thông tin lien lạc. Đồng thời tài khoản
này dung để thanh toán học phí khi sinh viên gửi tiền vào.
Cách thức tính học phí: Trường sẽ tổng hợp thong tin học tập của sinh
viên: Số môn học, số tín chỉ học phần, số tín chỉ thực tập, số tín chỉ tự học….Từ đó
trường sẽ tổng hợp đưa ra mức học phí cho từng sinh viên. Đồng thời trường sẽ
gửi thông tin này cho ngân hàng, do đó ngân hàng sẽ dựa vào mức học phí này
để thu tiền học phí của sinh viên.
Nộp học phí: Việc đóng học phí của sinh viên được chia làm ba đợt khác
nhau, mỗi đợt thu 1/3 học phí của sinh viên. Nếu đợt 1 sinh viên chưa đóng thì
học phí sẽ được dồn vào lần 2. Tương tự lần 2 chưa đóng sẽ được dồn vào lần 3.

Xử lý thông tin sau đóng học phí: Sau khi thu học phí ngân hang sẽ gửi
thông tin đóng học phí cho trường. Trường sẽ căn cứ vào kết quả này để xử lý
học tập tiếp theo.
2. Đặc tả yêu cầu phần mềm
2.1 Đặc tả chức năng
Chương trình yêu cầu phải có đầy đủ các chức năng sau:
- Chức năng đăng ký (Register)
Thuộc
tính
Mô tả
Tổng
quát
Trạng thái: proposed Ưu tiên: Low
Stereotype: << Functional>> Độ khó : Medium
Phạm vi: Public
Chức năng này cho phép người dung đăng ký một tài khoản
trong hệ thống
Nội dung
Hình : Đặc tả chức năng đăng ký
- Chức năng đăng nhập (Login)
Thuộ
c tính
Mô tả
Tổng quát Trạng thái: proposed
Ưu tiên: Medium
type: << Functional>>
Độ khó : Medium
Phạm vi: Public
Chức năng này cho phép người dùng đăng
nhập vào hệ thống để thực hiện các dịch vụ

đóng học phí.
Nội dung
Hình : Đặc tả chức năng đăng nhập
- Chức năng đóng học phí (Paying Tuition)
Thuộc
tính
Mô tả

×