SlideShare a Scribd company logo
1 of 54
LỜI MỞ ĐẦU
Mạng điện thoại di động xuất hiện tại Việt Nam từ đầu những năm 1990 và theo thời gian
số lượng các thuê bao cũng như các nhà cung cấp dịch vụ di động tại Việt Nam ngày
càng tăng. Do nhu cầu trao đổi thông tin ngày càng tăng và nhu cầu sử dụng sản phẩm
công nghệ cao nhiều tính năng, cấu hình cao, chất lượng tốt, kiểu dáng mẫu mã đẹp,
phong phú nên nhà cung cấp phải luôn cải thiện, nâng cao những sản phẩm của mình. Do
đó viêc xây dựng các ứng dụng cho điện thoại di động đang là một nghành công nghiệp
mới đầy tiềm năng và hứa hẹn nhiều sự phát triển vượt bậc của nghành khoa học kỹ
thuật.
Cùng với sự phát triển mạnh mẽ của xu hướng lập trình phần mềm ứng dụng cho các
thiết bị di động. Phần mềm, ứng dụng cho điện thoại di động hiện nay rất đa dạng và
phong phú trên các hệ điều hành di động cũng phát triển mạnh mẽ và đang thay đổi theo
từng ngày. Các hệ điều hành Winphone Mobile, Android, IOS, Tizen, Ubuntu, rất phát
triển trên thị trường di động.
Trong vài năm gần đây, hệ điều hành Android ra đời với sự kế thừa những ưu việt của
các hệ điều hành ra đời trước và sự kết hợp của nhiều công nghệ tiên tiến nhất hiện nay,
đã được nhà phát triển công nghệ rất nổi tiếng hiện nay là Google phát triển. Android đã
nhanh chóng là đối thủ cạnh tranh mạnh mẽ với các hệ điều hành trước đó và đang là hệ
điều hành di động của tương lai và được nhiều người sử dụng nhất.
Hiện nay, việc sở hữu một chiếc điện thoại thông minh không còn là một điều quá khó
với nhiều người, khi ai cũng có cho riêng mình một chiếc điện thoại thông minh thì việc
sử dụng nó để phục vụ cho cuộc sống là một điều tất yếu. Mỗi chiếc điện thoại thông
minh đều có tích hợp GPS, và có sẵn phần mềm bản đồ giúp chúng ta xác định vị trí hiện
tại của mình, tìm đường đi, tìm cây xăng, tìm quán ăn, dẫn đường…
Các phần mềm bản đồ hỗ trợ sẵn rất nhiều chức năng có ích, nhưng họ lại chưa tập chung
vào các chức năng:
Theo dõi vị trí của nhiều người trong một nhóm
Giúp người dùng đi du lịch tìm được những con đường gắn nhất, đẹp nhất, nhiều quán ăn,
nơi ngủ nghỉ giá rẻ nhất…
Tạo ra một mạng xã hội chia sẻ thông tin cho những người đi du lịch bụi, giao lưu, kết
bạn, trao đổi thông tin, chia sẻ ảnh video…
Với những vấn đề đặt ra ở trên thôi thúc tôi xây dựng lên một phần mềm chạy trên điện
thoại thông minh giúp mọi người có thể dễ dàng theo dõi vị ví của nhau.
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1. Tìm hiểu về spring framework
1.1. Spring là gì?
Spring framework, hay ngắn hơn là Spring, là một cấu trúc dùng để xây dựng
chương trình ứng dụng mã nguồn mở dành cho ngôn ngữ lập trình Java. Phiên bản đầu
tiên của nó do Rod Johnson viết và đã được ông xuất bản cùng với quyển sách đầu tay
Expert One-on-One JavaEE Design and Development (Nhà xuất bản Wrox Press, Tháng
10 năm 2002).
Kiến trúc của Spring framework được ra mắt công chúng lần đầu tiên hồi tháng 6
năm 2003 dưới Giấy phép Apache - phiên bản 2.0. Phiên bản 1.0 đánh dấu mốc thành
tháng 3 năm 2005.
Tuy Spring framework không bắt buộc người ta phải tuân theo một mô hình lập
trình cụ thể nào, song nó lan truyền rộng rải trong cộng đồng những người viết chương
trình dùng Java, như một hình thức chủ yếu thay thế cho mô hình Enterprise Java Bean.
Theo thiết kế, bộ framework này giải phóng lập trình viên dùng Java, cho phép họ nhiều
quyền tự do hơn và đồng thời cung cấp một giải pháp tiện lợi, đầy đủ dẫn chứng bằng
tài liệu, dễ dàng sử dụng, phù hợp với những thực hành thông dụng trong công nghệ
phần mềm.
Bên cạnh những đặc trưng nền tảng của Spring framework là những cái có thể
dùng được trong bất cứ một chương trình ứng dụng Java nào, rất nhiều các mở rộng và
tiến bộ trong việc kiến tạo các trình ứng dụng dành cho nền tảng mạng web (web-based
application) dựa trên nền Java Enterprise cũng tồn tại nữa. Spring framework nổi tiếng
cũng một phần do chính đặc thù kể trên và được giới thương mại công nhận như một
nền tảng kiến trúc có tầm quan trọng trong chiến lược kiến tạo phần mềm.
1.2. Lịch sử phát triển Spring
Phần đầu tiên của Spring framework ban đầu nguyên được Rod Johnson viết vào
năm 2000. Vào năm 2001, những mô hình lập trình cho các trình ứng dụng Web được
đại đa số sử dụng đều do Java Servlet API và Enterprise Java Bean cung cấp.
Năm 2003 thành lập dự án phát tại Sourceforge để phát triển Spring. Sau khi phát
triển trên nền tảng ban đầu hơn một năm họ đã phát hành phiên bản đầu tiên (1.0) vào
tháng 3 năm 2004.
Spring framework đã làm cho những kỹ thuật vốn không được biết đến mấy trở
nên những kỹ thuật được mọi người ưa chuộng trong một thời gian ngắn ngủi. Một trong
những kỹ thuật nổi tiếng hơn cả là kỹ thuật “đảo ngược quyền điều khiển” (Inversion of
Control, IoC).
Năm 2005 cho thấy mức độ hưởng ứng nâng cao hơn những năm trước, nguyên
do cũng vì những phiên bản mới được giới thiệu với những cột mốc đáng kể và những
tính năng mới được thêm vào. Diễn đàn Spring (Spring Forum) ra đời cuối năm 2004
đến nay đã sinh trưởng trở thành một nguồn thông tin quan trọng, giúp đỡ cho người sử
dụng.
Vào tháng 12 năm 2005, hội thảo đầu tiên về Spring Framework đã được tổ chức
ở Antwerp vào tháng 6 năm 2006, thu hút hơn 400 người.
1.3. Một số khái niệm chính
Hai trong những thành phần chủ chốt và là nền tảng tạo nên sức mạnh của Spring
chính là IoC và DI.
1.3.1. Inversion of Control (IoC)
IoC Container trong Spring được xây dựng dựa trên nguyên lý Inversion of Control
(đảo ngược điều khiển) đã xuất hiện khá lâu trong các mẫu hình thiết kế (design pattern),
và được phổ biến rộng rãi nhờ Robert C. Martin và Martin Fowler. Để hiểu về Spring,
trước tiên chúng ta cần hiểu khái niệm IoC là gì? Muốn vậy, chúng ta cần trả lời câu
hỏi: Control (điều khiển) trong chương trình phần mềm là gì, và Inversion (sự đảo
ngược) đối với điều khiển trong ngữ cảnh này được hiểu như thế nào?
Khái niệm Control Flow (tạm dịch là luồng thực thi) được sử dụng cho trình tự
thực hiện các câu lệnh, chỉ thị hoặc lời gọi hàm trong một chương trình, khi chương
trình này thực thi.
Do chương trình ngày càng phức tạp, nên các lập trình viên áp dụng phương pháp
lập trình hướng đối tượng nhằm phân loại, chia tách các chức năng và gom thành các
đối tượng. Các lập trình viên còn tạo dựng các thư viện tạo sẵn để có thể sử dụng lại.
Luồng thực thi của chương trình, trong những tình huống cần xem xét ở mức tổng thể,
không còn quan tâm đến các bước thực thi câu lệnh cụ thể nữa, mà chỉ xem xét đến quá
trình gọi phương thức của các đối tượng trong ứng dụng cũng như các đối tượng của thư
viện dựng sẵn.
Các lập trình viên, khi xây dựng ứng dụng từ đầu, đã thực hiện hai nhiệm vụ: trực
tiếp điều khiển luồng thực thi của chương trình và xây dựng các chức năng để đáp ứng
nghiệp vụ của ứng dụng. Thực tế, có nhiều chương trình hoặc bộ phận trong chương
trình có luồng thực thi rất giống nhau, chẳng hạn phần tương tác với HTTP trong các
ứng dụng web, phần unit testing trong các ứng dụng,… Việc trực tiếp tạo dựng và kiểm
soát luồng thực thi của chương trình lặp đi lặp lại khi xây dựng nhiều ứng dụng sẽ làm
mất nhiều công sức, chi phí, tạo ra sự nhàm chán và dễ phát sinh lỗi. Điều này tạo ra
động lực cũng như môi trường để nguyên lý đảo ngược điều khiển nảy nở và phát triển.
Vậy sự “đảo ngược” (inversion) luồng điều khiển chương trình trong ngữ cảnh này
được hiểu như thế nào? Chúng ta hãy xem xét 2 ví dụ dưới đây.
Ví dụ 1: Ứng dụng web trong Java với JavaServlet
Khi lập trình ứng dụng web bằng JavaServlet cần thực hiện các bước lập trình như
sau:
- Tạo lớp đối tượng kế thừa từ HttpServlet, override các phương thức doGet(),
doPost(),…
- Đăng ký trong file cấu hình Deployment Descriptor tương ứng Servlet này với
đường dẫn xác định.
- Lớp đối tượng Servlet chúng ta tạo ra sẽ được gọi đến khi có một truy vấn
Descriptor.
Vậy ai kích hoạt ứng dụng chúng ta viết để đáp ứng mỗi khi có HTTP Request gửi
đến? Ai chịu trách nhiệm chuyển đổi các thông điệp HTTP (HTTP Request và HTTP
Response) thành các đối tượng Java (HttpServletRequest và HttpServletResponse) để
truyền cho các hàm doGet(), doPost()?
Trong quá trình phát triển các thành phần chức năng của ứng dụng, chúng ta thường
ứng dụng được mở rộng và phát triển thêm. Để tạo bộ unit test, chúng ta chỉ cần tạo một
lớp đối tượng, định nghĩa các phương thức khởi tạo, phương thức kết thúc và các phương
Việc điều khiển trình tự thực thi các phương thức được giao cho thư viện bên ngoài
đảm nhiệm chẳng hạn như TestNG hoặc JUnit.
trò. Ứng dụng không còn ôm đồm vừa trực tiếp tạo dựng và kiểm soát luồng thực thi,
vừa xây dựng chức năng nghiệp vụ. Việc kiểm soát luồng thực thi được tách khỏi chức
năng nghiệp vụ và bị đẩy ra bên ngoài. Người lập trình đã ủy thác việc kiểm soát luồng
thực thi ứng dụng cho một thành phần (thường là thư viện dựng sẵn) bên ngoài đảm
nhiệm, chỉ còn tập trung vào chức năng chính của ứng dụng.
Như vậy, khái niệm “đảo ngược” ở đây chính là chuyển nhiệm vụ kiểm soát lưu
trình thực thi từ ứng dụng cho một thành phần chuyên trách (thường là một thư viện
phần mềm khung – framework – dựng sẵn ở bên ngoài). Ứng dụng chính chúng ta quan
tâm phát triển không kiểm soát việc điều khiển luồng thực thi nữa, mà chỉ tập trung vào
việc định nghĩa chức năng. Thư viện phần mềm khung chuyên trách kiểm soát điều
khiển sẽ dựa trên mô tả trong cấu hình của ứng dụng để thay mặt ứng dụng điều phối
luồng thực thi trong chương trình.
Dễ dàng nhận thấy thư viện phần mềm khung này khác với các thư viện thông
thường ở chỗ: thư viện thông thường cung cấp các chức năng và chờ được ứng dụng gọi
đến, còn thư viện phần mềm khung tạo dựng luồng thực thi và gọi đến các chức năng
của ứng dụng.
Nói một cách ngắn gọn IoC là một design pattern và tập hợp các kỹ thuật lập trình
truyền thống [4, tr1]. IoC trong Spring cũng hoàn toàn mang ý nghĩa như trên. Trong
Spring các đối tượng chính để xây dựng ứng dụng thì được quản lý bởi Spring IoC
một đối tượng được khởi tạo và quản lý bởi Spring IoC container.
1.3.2. Dependency Injection (DI)
chính là việc các thuộc tính trong một đối tượng được “tiêm chích” (injection) để tham
chiếu lần lượt đến các đối tượng khác. Dependency Injection trong Spring hoạt động
dựa trên Java Reflection.
2. Tìm hiểu về Spring Boot
2.1. Spring boot là gì?
Spring Boot là một Project nằm trên tầng IO Execution (Tầng thực thi) của Spring IO
Framework.
Spring Boot là một bước tiếp theo của Spring, để làm cho Spring dễ dàng hơn trong việc
thiết lập và phát triển ứng dụng. Với Spring Boot các cấu hình Spring được giảm thiểu tối
đa. Spring Boot hỗ trợ các bộ chứa nhúng (embedded containers) điều này cho phép các
ứng dụng web có thể chạy độc lập mà không cần phải trên khai lên các Web Server.
Bạn có thể dùng spring boot để tạo ứng dụng Java Web chạy bằng command line 'java
-jar' hoặc xuất khẩu ra file war để triển khai lên Web Server như thông thường. Spring
Boot cung cấp cho bạn một "CLI Tool" để chạy các kịch bản Spring (spring scripts).
Spring Boot có thể giải thích một cách đơn giản bởi hình minh họa dưới đây:
2.2. Ưu điểm của spring boot
Nó rất dễ dàng để phát triển các ứng dụng dựa trên Spring với Java hoặc Groovy.
Nó giảm thiểu thời gian phát triển và tăng năng xuất
Nó tránh việc phải viết nhiều mã nguyên mẫu (boilerplate Code), Annotations và các cấu
hình XML.
Nó dễ dàng để bạn tương tác các ứng dụng Spring Boot với các hệ sinh thái của Spring
như Spring JDBC, Spring ORM, Spring Data, Spring Security etc.
Nó đi theo cách tiếp cận “Nguyên tắc cấu hình mặc định” để giảm thiểu thời gian và nỗ
lực cần thiết để phát triển ứng dụng.
Nó cung cấp các Server nhúng (Embedded HTTP servers) như là Tomcat, Jetty .... để
phát triển và test các ứng dụng web nhanh chóng và dễ dàng.
Nó cung cấp công cụ CLI (Command Line Interface) dể phát triển và test các ứng dụng
Spring Boot (Java hoặc Groovy) từ các dòng lệnh (command prompt) rất dễ dàng và
nhanh chóng.
Nó cung cấp rất nhiều các plugin để phát triển và test các ứng dụng Spring Boot nhanh
chóng sử dụng các công cụ Build như Maven và Gradle
Nó cung cấp nhiều plugin để làm việc với các các bộ nhúng và các Database lưu trữ trên
bộ nhớ (in-memory Databases) một cách dễ dàng.
2.3. RESTful Web Service
2.3.1. RESTful là gì?
Những khái niệm đầu tiên về REST (REpresentational State Transfer) được đưa ra vào
năm 2000 trong luận văn tiến sĩ của Roy Thomas Fielding (đồng sáng lập giao thức
HTTP). Trong luận văn ông giới thiệu khá chi tiết về các ràng buộc, quy ước cũng như
cách thức thực hiện với hệ thống để có được một hệ thống REST.
Hiểu đơn giản nó là một bộ các ràng buộc và quy ước, khi áp dụng đầy đủ vào hệ thống
của bạn thì ta có 1 hệ thống REST.
REST Contraints
• Hệ thống hoạt động theo mô hình client-server, trong đó server là tập hợp các
service nhỏ lắng nghe các request từ client. Với từng request khác nhau thì có thể một
hoặc nhiều service xử lý.
• Stateless (phi trạng thái). Đơn giản server và client không lưu trạng thái của nhau
mỗi request lên server thì client phải đóng gói thông tin đầy đủ để thằng server hiểu
được. Điều này giúp hệ thống của bạn dễ phát triển, bảo trì, mở rộng vì không cần tốn
công CRUD trạng thái của client. Hệ thống phát triển theo hướng này có ưu điểm nhưng
cũng có khuyết điểm là gia tăng lượng thông tin cần truyền tải giữa client và server.
• Khả năng caching: Các response có thể lấy ra từ cache. Bằng cách cache các
response, server giảm tải việc xử lý request, còn client cũng nhận được thông tin nhanh
hơn. Ở đây ta đặt 1 thằng cache vào giữa: client- cache- server.
• Chuẩn hóa các interface: Đây là một trong những đặc tính quan trọng của hệ thống
REST. Bằng cách tạo ra các quy ước chuẩn để giao tiếp giữa các thành phần trong hệ
thống, bạn đã đơn giản hóa việc client có thể tương tác với server. Các quy ước này áp
dụng cho toàn bộ các service giúp cho người sử dụng hệ thống của bạn dễ dụng hơn. Dễ
hiểu hơn trên hệ thống bạn đặt ra 1 chuẩn API để người dùng dù là mobile, web đều có
thể kết nối vào được. Hệ thống REST có yếu điểm ở đây vì khi chuẩn hóa rồi ta không
thế tối ưu từng kết nối.
• Phân lớp hệ thống: trong hệ thống REST bạn chia tách các thành phần hệ thống
theo từng lớp, mỗi lớp chỉ sử dụng lớp ở dưới nó và giao tiếp với lớp ở ngay trên nó mà
thôi. Điều này giúp bạn giảm độ phức tạp của hệ thống, giúp các thành phần tách biệt
nhau từ đó dễ dàng mở rộng từng thành phần.
Resources (Tài nguyên)
Hệ thống REST trước hệt phải tuân thủ các ràng buộc ở trên. Đi vào chi tiết, hệ thống
REST tập trung vào việc xử lý các tài nguyên. Resource là bất cứ cái gì mà bạn có thể gọi
tên được (một video, ảnh, trang web, báo cáo thời tiết .v.v). Các tài nguyên này giúp ta
định nghĩa được các services trong hệ thống, kiểu thông tin mà nó trả về, và hành vi xử lý
thông tin của nó.
Các đặc tính mô tả một tài nguyên:
• Nhiều cách thức hiển thị: dữ liệu bạn nhận được có thể ở nhiều dạng ( binary,
JSON, XML .v.v) dữ liệu này đại diện cho 1 tài nguyên xác định.
• Nhận diện rõ ràng: Mỗi URL tại một thời điểm chỉ trả về 1 tài nguyên xác định.
• Dữ liệu mô tả (metadata): Kiểu nội dung (Content-type), lần cập nhâp mới .v.v
• Dữ liệu điều khiển: Is-modifiable-since, cache-control.
3. Tìm hiểu về Mongodb
3.1. Mongodb là gì?
NoSQL là Non-Relational: tạm dịch là không có quan hệ. NoSQL là cơ sở dữ
liệu không quan hệ, ràng buộc giữa các Collection (hay còn gọi là bảng trong cơ
sở dữ liệu bình thường). Tức là giữa các Collection (Bảng) sẽ không có khóa
chính, khóa ngoại như trong cơ sở dữ liệu bình thường. Việc này sẽ giảm bớt rối
khi cơ sở dữ liệu chúng ta có nhiều bảng. NoSQL đặc biệt nhấn mạnh đến mô hình
lưu trữ cặp giá trị - khóa và hệ thống lưu trữ phân tán.
3.2. Ưu điểm của mongodb
MongoDB là một cơ sở dữ liệu dựa trên Document, trong đó một Collection giữ các
Document khác nhau. Số trường, nội dung và kích cỡ của Document này có thể khác với
Document khác.
Cấu trúc của một đối tượng là rõ ràng.
Khả năng truy vấn sâu hơn. MongoDB hỗ trợ các truy vấn động trên các Document bởi
sử dụng một ngôn ngữ truy vấn dựa trên Document mà mạnh mẽ như SQL.
MongoDB dễ dàng để mở rộng.
Việc chuyển đổi/ánh xạ của các đối tượng ứng dụng đến các đối tượng cơ sở dữ liệu là
không cần thiết.
Sử dụng bộ nhớ nội tại để lưu giữ phần công việc, giúp truy cập dữ liệu nhanh hơn.
4. Tìm hiểu về hệ điều hành Android
4.1. Android là gì?
Android là hệ điều hành điện thoại di động mở nguồn mở miễn phí do Google phát triển
dựa trên nền tảng của Linux. Bất kỳ một hãng sản xuất phần cứng nào cũng đều có thể tự
do sử dụng hệ điều hành Android cho thiết bị của mình, miễn là các thiết bị ấy đáp ứng
được các tiêu chuẩn cơ bản do Google đặt ra (có cảm ứng chạm, GPS, 3G,...)
Các nhà sản xuất có thể tự do thay đổi phiên bản Android trên máy của mình một cách tự
do mà không cần phải xin phép hay trả bất kì khoản phí nào nhưng phải đảm bảo tính
tương thích ngược (backward compatibility) của phiên bản chế riêng đó.
Android là nền tảng cho thiết bị di động bao gồm một hệ điều hành, midware và một số
ứng dụng chủ đạo. Bộ công cụ Android SDK cung cấp các công cụ và bộ thư viên các
hàm API cần thiết để phát triển ứng dụng cho nền tảng Android sử dụng ngôn ngữ lập
trình java.
Những tính năng mà nền tảng Android hổ trợ:
• Application framework: Cho phép tái sử dụng và thay thế các thành phần sẳn có
của Android.
• Dalvik virtual macine: Máy ảo java được tối ưu hóa cho thiết bị di động.
• Intergrated browser: Trình duyệt web tích hợp được xây dựng dựa trên WebKIT
engine.
• Optimized graphics: Hổ trợ bộ thư viện 2D và 3D dự vào đặc tả OpenGL ES 1.0.
• SQLite: DBMS dùng để lưu trữ dữ liệu có cấu trúc.
Hổ trở các định dạng media phổ biến như: MPEG4, H.264, MP3, AAC, ARM, JPG,
PNG, GIF.
• Hổ trợ thoại trên nền tảng GSM (Phụ thuộc vài phần cứng thiết bị).
• Bluetooth, EDGE, 3G và WiFi (Phụ thuộc vài phần cứng thiết bị).
• Camera, GPS, la bàn và cảm biến (Phụ thuộc vài phần cứng thiết bị).
• Bộ công cụ phát triển ứng dụng mạnh mẽ.
Ở các chương sau chúng ta sẽ đề cập sâu hơn về các vấn đề của ANDROID ví dụ như:
Lịch sử hình thành, cấu trúc ….
4.2. Lịch sử phát triển Android
Ban đầu, Android là hệ điều hành cho các thiết bị cầm tay dựa trên lõi Linux do công ty
Android Inc. (California, Mỹ) thiết kế. Công ty này sau đó được Google mua lại vào năm
2005 và bắt đầu xây dựng Android Platform. Các thành viên chủ chốt tại ở Android Inc.
gồm có: Andy Rubin, Rich Miner, Nick Sears, and Chris White.
Và sau tiếp, vào cuối năm 2007, thuộc về Liên minh Thiết bị Cầm tay Mã Nguồn mở
(Open Handset Alliance) gồm các thành viên nổi bật trong ngành viễn thông và thiết bị
cầm tay như: Texas Instruments, Broadcom Corporation, Google, HTC, Intel, LG,
MarvellTechnology Group, Motorola, Nvidia, Qualcomm, Samsung Electronics,
SprintNextel, T-Mobile, ARM Holdings, Atheros Communications, Asustek Computer
Inc, Garmin Ltd, Softbank, Sony Ericsson, Toshiba Corp, and Vodafone Group,…
Mục tiêu của Liên minh này là nhanh chóng đổi mới để đáp ứng tốt hơn cho nhu cầu
người tiêu dùng và kết quả đầu tiên của nó chính là nền tảng Android. Android được thiết
kế để phục vụ nhu cầu của các nhà sản xuất thiết, các nhà khai thác và các lập trình viên
thiết bị cầm tay.
Phiên bản SDK lần đầu tiên phát hành vào tháng 11 năm 2007, hãng T-Mobile cũng công
bố chiếc điện thoại Android đầu tiên đó là chiếc T-Mobile G1, chiếc smartphone đầu tiên
dựa trên nền tảng Android. Một vài ngày sau đó, Google lại tiếp tục công bố sự ra mắt
phiên bản Android SDK release Candidate 1.0. Trong tháng 10 năm 2008, Google được
cấp giấy phép mã nguồn mở cho Android Platform. Khi Android được phát hành thì một
trong số các mục tiêu trong kiến trúc của nó là cho phép các ứng dụng có thể tương tác
được với nhau và có thể sử dụng lại các thành phần từ những ứng dụng khác. Việc tái sử
dụng không chỉ được áp dụng cho cho các dịch vụ mà nó còn được áp dụng cho cả các
thành phần dữ liệu và giao diện người dùng.
Vào cuối năm 2008, Google cho phát hành một thiết bị cầm tay được gọi là Android Dev
Phone 1 có thể chạy được các ứng dụng Android mà không bị ràng buộc vào các nhà
cung cấp mạng điện thoại di động. Mục tiêu của thiết bị này là cho phép các nhà phát
triển thực hiện các cuộc thí nghiệm trên một thiết bị thực có thể chạy hệ điều hành
Android mà không phải ký một bản hợp đồng nào. Vào khoảng cùng thời gian đó thì
Google cũng cho phát hành một phiên vản vá lỗi 1.1 của hệ điều hành này. Ở cả hai phiên
bản 1.0 và 1.1 Android chưa hỗ trợ soft-keyboard mà đòi hỏi các thiết bị phải sử dụng
bàn phím vật lý. Android cố định vấn đề này bằng cách phát hành SDK 1.5 vào tháng Tư
năm 2009, cùng với một số tính năng khác. Chẳng hạn như nâng cao khả năng ghi âm
truyền thông, vật dụng, và các live folder.
4.3. Tìm hiểu về máy ảo trong android
4.3.1. Máy ảo Dalvik
Dalvik là máy ảo giúp các ứng dụng java chạy được trên các thiết bị động Android. Nó
chạy các ứng dụng đã được chuyển đổi thành một file thực thi Dalvik (dex). Định dạng
phù hợp cho các hệ thống mà thường bị hạn chế về bộ nhớ và tốc độ xử lý. Dalvik đã
được thiết kế và viết bởi Dan Bornstein, người đã đặt tên cho nó sau khi đến thăm một
ngôi làng đánh cá nhỏ có tên là Dalvík ở đảo Eyjafjörður, nơi mà một số tổ tiên của ông
sinh sống.
Từ góc nhìn của một nhà phát triển, Dalvik trông giống như máy ảo Java (Java Virtual
Machine) nhưng thực tế thì hoàn toàn khác. 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ế ảo thực thi các ứng dụng Android.
Ban đầu, Dalvik chỉ là một máy ảo khá đơn giản. Song, khi các thiết bị di động ngày càng
trở nên phức tạp hơn, Google sẽ cần phải giải quyết các vấn đề hiệu năng, bởi hiệu năng
máy ảo sẽ luôn kém cỏi hơn rất nhiều so với chạy trực tiếp như trên iOS hay Windows.
Đồng thời, do Dalvik là phần mềm chịu trách nhiệm thực thi gần như tất cả các ứng dụng
Android, Google sẽ phải tìm cách giúp máy ảo Android của mình có thể bắt kịp với các
tiến bộ của ngành công nghiệp phần cứng. Dần dần, Google đã trang bị cho Dalvik một
bộ biên dịch JIT (Just-in-time: biên dịch mã nguồn ngay trước khi thực thi), khả năng
chạy nhiều thread (chạy song song nhiều luồng) cùng vô số thay đổi nhỏ khác.
Tuy vậy, trong những năm vừa qua, tốc độ phát triển của hệ sinh thái Android đã vượt
quá khả năng phát triển của Dalvik. Do đó, Google cần phải xây dựng một phần mềm
runtime (phần mềm chịu trách nhiệm chạy các ứng dụng khác) hoàn toàn mới để làm cơ
sở vững chắc cho tương lai. Cụ thể hơn, giải pháp phần mềm runtime mới của Google sẽ
phải thích ứng với hiệu năng của cả các vi xử lý của ngày hôm nay cũng như các vi xử lý
8 nhân của những năm tới, có thể mở rộng thêm bộ nhớ và RAM của thiết bị.
Từ đó, ART ra đời.
4.3.2. Máy ảo ART
Trước hết, ART được thiết kế để tương thích hoàn toàn với mô hình biên dịch bytecode
của Dalvik. Do đó, khi nhìn từ góc độ nhà phát triển ứng dụng, bạn sẽ không cần phải
viết mã nguồn riêng cho Dalvik rồi viết lại cho ART. Bạn không cần phải lo lắng gì về
tính tương thích giữa 2 môi trường này cả.
Sự thay đổi lớn nhất về thiết kế mà ART mang tới là khả năng biên dịch code theo mô
hình AOT (Ahead of Time) thay vì JIT (Just in Time) như trước đây. Điều này có ý nghĩa
là gì? Bộ runtime mới của Android không còn cần phải dịch từ bytecode sang mã máy
mỗi lần chạy ứng dụng. Thay vào đó, ART sẽ chỉ biên dịch bytecode sang mã máy đúng
một lần duy nhất. Quá trình thực thi ứng dụng trong các lần chạy tương lai sẽ được thực
hiện từ các đoạn mã máy đã được tạo ra từ trước.
Sự thay đổi này sẽ giúp mang tới các ứng dụng được tối ưu hơn. Đây thực sự là một bước
tiến hoàn toàn nằm ngoài khả năng của Dalvik. Trên Android L, do mã nguồn sẽ được tối
ưu và biên dịch sang mã máy đúng một lần duy nhất, chu trình tối ưu này sẽ cần phải
được thực hiện rất tốt. Theo Google, Android giờ đã có thể đạt đến mức tối ưu tốt hơn đối
với toàn bộ code-base (tất cả mã nguồn) của 1 ứng dụng. Điều này là do trình biên dịch
mới giờ đã có thể nhìn vào tổng thể toàn bộ mã nguồn, trong khi trình biên dịch JIT hiện
tại chỉ có thể tối ưu mã trên phạm vi method/local (trong một hàm nhất định).
Nhờ đó, các đoạn code sẽ có thể lược bỏ các đoạn mã có thể bị coi là thừa nhưng vẫn bắt
buộc phải có nếu sử dụng kiến trúc cũ, ví dụ như check exception (kiểm tra và bắt trước
các lỗi có thể xảy ra trong quá trình chạy). Quá trình gọi hàm hoặc gọi interface cũng sẽ
nhanh hơn đáng kể. Quá trình này sẽ được thực hiện bên trong phần mềm "dex2oat" –
phiên bản thay thế cho dexopt trên Dalvik. Các file odex (file dex đã được tối ưu) cũng sẽ
bị thay thế bằng file ELF.
Do ART biên dịch các file thực thi ELF, nhân của Android giờ có thể quản lý các trang
của code page (tập mã hóa ký tự của 1 ngôn ngữ) một cách hiệu quả hơn. Nhờ đó mà hệ
điều hành di động của Google có thể quản lý bộ nhớ tốt hơn và tốn ít RAM hơn.
Ảnh hưởng của ART tới thời lượng pin có lẽ cũng là rất đáng kể, do hệ điều hành không
cần phải biên dịch mã nguồn trong quá trình chạy ứng dụng nữa. Nhờ đó, quá trình chạy
ứng dụng sẽ giảm được đáng kể sức ép lên CPU, giúp tiết kiệm pin tốt hơn.
Điểm yếu lớn nhất của ART so với ELF là quá trình biên dịch mã sẽ tốn nhiều thời gian
hơn. Do đó, quá trình khởi động điện thoại cũng như lần bật ứng dụng đầu tiên sẽ tốn
nhiều thời gian hơn so với ứng dụng tương đương trên Dalvik. Tuy vậy, theo tuyên bố
của Google, phiên bản hoàn thiện sẽ có thời gian khởi động tương đương hoặc nhanh hơn
Dalvik. Kể cả nếu gã khổng lồ tìm kiếm không thể thực hiện lời hứa này, người dùng
thông thường cũng sẽ chỉ phải tốn thêm thời gian chờ đợi trong lần đầu cài đặt. Trải
nghiệm sử dụng sau đó sẽ trở nên mượt mà hơn rất nhiều.
4.4. Kiến trúc của android
Hệ điều hành Android là 1 ngăn xếp các thành phần phần mềm, được chia thành 5 phần
và 4 lớp chính như trong hình bên dưới.
4.4.1. Linux Kernel
Dưới cùng là lớp Linux - Linux 3.6 cùng với khoảng 115 bản vá. Lớp này cung cấp 1 cấp
độ trừu tượng giữa phần cứng của thiết bị và các thành trình điều khiển phần cứng thiết
yếu như máy ảnh, bàn phím, màn hình hiển thị... Đồng thời, hạt nhân (kernel) còn xử lý
tất cả các thứ mà Linux có thể làm tốt như mạng kết nối và 1 chuỗi các trình điều khiển
thiết bị, giúp cho giao tiếp với các thiết bị ngoại vi dễ dàng hơn.
4.4.2. Các thư viện
Ở trên lớp nhân Linux là tập các thư viện bao gồm WebKit - trình duyệt Web mã nguồn
mở, được biết đến như thư viện libc, cơ sở dữ liệu SQLite - hữu dụng cho việc lưu trữ và
chia sẻ dữ liệu ứng dụng, các thư viênj chơi và ghi âm audio, video, hay các thư viện SSL
chiụ trách nhiệm bảo mật Internet...
4.4.3. Các thư viện Android
Đây là các thư viện dựa trên Java phục vụ cho việc phát triển Android. Ví dụ của các thư
viện này bao gồm các thư viện ứng dụng dùng để xây dựng giao diện người dùng, vẽ đồ
họa hay truy cập cơ sở dữ liệu. 1 số thư viện chính của Android:
android.app - Cung cấp quyền truy cập vào ứng dụng và là nền tảng của tất cả ứng dụng
Android.
android.content - Cung cấp quyền truy cập nội dung (content), truyền tải thông điệp giữa
các ứng dụng hay các thành phần của ứng dụng.
android.database - Đựoc sử dụng để truy cập dữ liệu của content provider và cơ sở dữ
liệu SQLite
android.opengl - giao diện các phuơng thức Java để sử dụng OpenGL ES
android.os - Cung cấp các ứng dụng với quyền truy cập vào các dịch vụ của hệ điều hành
bao gồm thông điệp, các dịch vụ hệ thống và các giao tiếp nội tại
android.text - Đựoc sử dụng để hiển thị và điều chỉnh chữ trên màn hình thiết bị
android.view - Các thành phần cơ bản trong việc xây dựng giao diện người dùng của ứng
dụng.
android.widget - Tập các thành phần giao diện người dùng đã được xây dựng sẵn như các
nút, các nhãn (label), list view,....
android.webkit - Tập các lớp cho phép xây dựng khả năng duyệt web.
4.4.4. Android Runtime
Đây là phần thứ 3 của kiến trúc và nằm ở lớp thứ 2 từ dưới lên. Phần này cung cấp 1 bộ
phận quan trọng là Dalvik Virtual Machine - là 1 loại Java Virtual Machine được thiết kế
đặc biệt để tối ưu cho Android.
Dalvik VM sử dụng các đặc trưng của nhân Linux như quản lý bộ nhớ và đa luồng,
những thứ mà đã có sẵn trong Java. Dalvik VM giúp mọ ứng dụng Android chạy trong
tiến trình riêng của nó, với các thể hiện (instance) riêng của Dalvik virtual Machine.
Android Runtime cũng cung cấp 1 tập các thư viện chính giúp các nhà phát triển ứng
dụng Android có thể viết ứng dụng Android bằng Java
4.4.5. Application Framework
Lớp Android Framework cung cấp các dịch vụ cấp độ cao hơn cho các ứng dụng dưới
dạng các lớp Java. Các nhà phát triển ứng dụng được phép sử dụng các dịch vụ này trong
ứng dụng của họ.
Android Framework bao gồm các dịch vụ chính sau:
• Activitty Manager - Kiểm soát tất cả khía cạnh của vòng đời ứng dụng và ngăn
xếp các Activity.
• Content Providers - Cho phép các ứng dụng chia sẽ dữ liệu với các ứng dụng khác.
• Resource Manager - Cung cấp quyền truy cập vào các tài nguyên như các chuỗi,
màu sắc, các layout giao diện người dùng...
• Notifications Manager - Cho phép các ứng dụng hiển thị cảnh báo và các thông
báo cho người dùng.
• View System - Tập các thành phần giao diện (view) được sử dụng để tạo giao diện
người dùng.
4.4.6. Application
Lớp trên cùng của kiến trúc là Application. Các ứng dụng bạn tạo ra sẽ được cài đặt trên
lớp này. Ví dụ như: Danh bạ, nhắn tin, trò chơi...
4.6. Chu Kỳ Ứng Dụng Android
Một tiến trình Linux gói gọn một ứng dụng Android đã được tạo ra cho ứng dụng khi
codes cần được run và sẽ còn chạy cho đến khi:
• Nó không phụ thuộc.
• Hệ thống cần lấy lại bộ nhớ mà nó chiếm giữ cho các ứng dụng khác. Một sự
khác thường và đặ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 một kết hợp của:
• Những phần của ứng dụng mà hệ thống biết đang chạy
• Những phần quan trọng như thế nào đối với người dung Bao nhiêu vùng nhớ
chiếm lĩnh trong hệ thống.
4.7. Chu kỳ thành phần sống trong Android
Các thành phần ứng dụng có một chu kỳ sống, tức là mỗi thành phần từ lúc bắt đầu khởi
tạo và đến thời điểm kết thúc. Giữa đó, đôi lúc chúng có thể là active hoặc inactive, hoặc
là trong trường hợp activies nó có thể visible hoặc invisible.
4.9. Các trạng thái của chu kỳ sống
Một Activity chủ yếu có 3 chu kỳ chính sau:
• Active hoặc running: Khi Activity là được chạy trên màn hình. Activity này tập
trung vào những thao tác của người dùng trên ứng dụng.
• Paused: Activity là được tạm dừng (paused) khi mất focus nhưng người dung
vẫn trông thấy. Có nghĩa là một Activity mới ở trên nó nhưng không bao phủ
đầy màn hình. Một Activity tạm dừng là còn sống nhưng có thể bị kết thúc bởi
hệ thống trong trường hợp thiếu vùng nhớ.
• Stopped: Nếu nó hoàn toàn bao phủ bởi Activity khác. Nó vẫn còn trạng thái
và thông tin thành viên trong nó. Người dùng không thấy nó và thường bị loại
bỏ trong trường hợp hệ thống cần vùng nhớ cho tác vụ khác.
4.10. Các phương thức của chu kỳ sống
 Phương thức: onCreate()
 Được gọi khi activity lần đầu tiên được tạo
 Ở đây bạn làm tất cả các cài đặt tĩnh -- tạo các view, kết nối dữ liệu đến list và .v.v
 Phương thức này gửi qua một đối tượngBundle chứa đựng từ trạng thái trược của
Activity
 Luôn theo sau bởi onStart()
 Phương thức: onRestart()
 Được gọi sau khi activity đã được dừng, chỉ một khoảng đang khởi động lần nữa
(stared again)
 Luôn theo sau bởi onStart()
 Phương thức: onStart()
 Được gọi trước khi một activity visible với người dùng.
 Theo sau bởi onResume() nếu activity đến trạng thái foreground hoặc onStop() nế
nó trở nên ẩn.
 Phương thức: onResume()
 Được gọi trước khi activity bắt đầu tương tác với người dùng
 Tại thời điểm này activity ở trên dỉnh của stack activity.
 Luôn theo sau bởi onPause()
 Phương thức: onPause()
 Được gọi khi hệ thống đang resuming activity khác.
 Phương thức này là điển hình việc giữ lại không đổi dữ liệu.
 Nó nên được diễn ra một cách nhanh chóng bởi vì activity kế tiếp sẽ không được
resumed ngay cho đến khi nó trở lại.
 Theo sau bởi onResume nếu activity trở về từ ở trước, hoặc bởi onStop nếu nó trở
nên visible với người dùng.
 Trạng thái của activity có thể bị giết bởi hệ thống.
 Phương thức: onStop()
 Được gọi khi activity không thuộc tầm nhìn của người dùng.
 Nó có thể diễn ra bởi vì nó đang bị hủy, hoặc bởi vì activity khác vữa được
resumed và bao phủ nó.
 Được theo sau bởi onRestart() nếu activity đang đở lại để tương tác với người
dùng, hoặc onDestroy() nếu activity đang bỏ.
 Trạng thái của activity có thể bị giết bởi hệ thống.
 Phương thức: onDestroy()
 Được gọi trước khi activity bị hủy.
 Đó là lần gọi cuối cùng mà activity này được nhận.
 Nó được gọi khác bởi vì activity đang hoàn thành, hoặc bởi vì hệ thống tạm thởi bị
hủy diệt để tiết kiệm vùng nhớ.
 Bạn có thể phân biệt giữa 2 kịch bản với phương isFinshing(). Trạng thái của
activity có thể được giết bởi hệ thống.
5. Tìm hiểu về GPS
5.1. GPS là gì?
m 27 vệ tinh quay xung quanh trái đất. Trong số 27 vệ tinh này, 24 vệ tinh đang hoạt
động, 3 vệ tinh còn lại đóng vai trò dự phòng trong trường hợp 1 trong số 24 vệ tinh
chính bị hư hỏng. Dựa vào cách sắp đặt của các vệ tinh này, khi đứng dưới mặt đất, bạn
có thể nhìn được ít nhất là 4 vệ tinh trên bầu trời tại bất kì thời điểm nào.
5.2. Phân loại
Hệ thống định vị toàn cầu của Mỹ là hệ dẫn đường dựa trên một mạng lưới 24 quả vệ tinh
được Bộ Quốc phòng Hoa Kỳ đặt trên quỹ đạo không gian.
Các hệ thống dẫn đường truyền thống hoạt động dựa trên các trạm phát tín hiệu vô tuyến
điện. Được biết đến nhiều nhất là các hệ thống sau: LORAN – (LOng RAnge Navigation)
– hoạt động ở giải tần 90-100 kHz chủ yếu dùng cho hàng hải, hay TACAN – (TACtical
Air Navigation) – dùng cho quân đội Mỹ và biến thể với độ chính xác thấp VOR/DME –
VHF (Omnidirectional Range/Distance Measuring Equipment) – dùng cho hàng không
dân dụng.
Gần như đồng thời với lúc Mỹ phát triển GPS, Liên Xô cũng phát triển một hệ thống
tương tự với tên gọi GLONASS. Hiện nay Liên minh châu Âu đang phát triển hệ dẫn
đường vệ tinh của mình mang tên Galileo. Trung Quốc thì phát triển hệ thống định vị
toàn cầu của mình mang tên Bắc Đẩu bao gồm 35 vệ tinh.
Ban đầu, GPS và GLONASS đều được phát triển cho mục đích quân sự, nên mặc dù
chúng dùng được cho dân sự nhưng không hệ nào đưa ra sự đảm bảo tồn tại liên tục và
độ chính xác. Vì thế chúng không thỏa mãn được những yêu cầu an toàn cho dẫn đường
dân sự hàng không và hàng hải, đặc biệt là tại những vùng và tại những thời điểm có hoạt
động quân sự của những quốc gia sở hữu các hệ thống đó. Chỉ có hệ thống dẫn đường vệ
tinh châu Âu Galileo (đang được xây dựng) ngay từ đầu đã đặt mục tiêu đáp ứng các yêu
cầu nghiêm ngặt của dẫn đường và định vị dân sự.
GPS ban đầu chỉ dành cho các mục đích quân sự, nhưng từ năm 1980 chính phủ Mỹ cho
phép sử dụng trong dân sự. GPS hoạt động trong mọi điều kiện thời tiết, mọi nơi trên Trái
Đất, 24 giờ một ngày. Không mất phí thuê bao hoặc mất tiền trả cho việc thiết lập sử
dụng GPS nhưng phải tốn tiền không rẻ để mua thiết bị thu tín hiệu và phần mềm nhúng
hỗ trợ.
5.3. Sự hoạt động của GPS
Các vệ tinh GPS bay vòng quanh Trái Đất hai lần trong một ngày theo một quỹ đạo rất
chính xác và phát tín hiệu có thông tin xuống Trái Đất. Các máy thu GPS nhận thông tin
này và bằng phép tính lượng giác tính được chính xác vị trí của người dùng. Về bản chất
máy thu GPS so sánh thời gian tín hiệu được phát đi từ vệ tinh với thời gian nhận được
chúng. Sai lệch về thời gian cho biết máy thu GPS ở cách vệ tinh bao xa. Rồi với nhiều
quãng cách đo được tới nhiều vệ tinh máy thu có thể tính được vị trí của người dùng và
hiển thị lên bản đồ điện tử của máy.
Máy thu phải nhận được tín hiệu của ít nhất ba vệ tinh để tính ra vị trí hai chiều (kinh độ
và vĩ độ) và để theo dõi được chuyển động. Khi nhận được tín hiệu của ít nhất 4 vệ tinh
thì máy thu có thể tính được vị trí ba chiều (kinh độ, vĩ độ và độ cao). Một khi vị trí
người dùng đã tính được thì máy thu GPS có thể tính các thông tin khác, như tốc độ,
hướng chuyển động, bám sát di chuyển, khoảng hành trình, quãng cách tới điểm đến, thời
gian Mặt Trời mọc, lặn và nhiều thứ khác nữa.
CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG
1. Đặc tả bài toán
Hiện nay việc theo dõi vị trí, chia sẻ các địa điểm theo thời gian thực là một trong những
vấn đề nóng được các nhà phát triển lớn quan tâm đến, Google là một trong những nhà
phát triển lớn nhất quan tâm và đang xây dựng các hệ thống lớn liên quan đến vị trí, bản
đồ, thời gian thực, họ rất thành công trong lĩnh vực này.
Trên thế giới cũng như ở việt nam, điện thoại di động thông minh là một thứ không thể
thiếu được trong đời sống hàng ngày của mọi người dân, khi đời sống người dân được
nâng cao thì nhu cầu sử dụng điện thoại cũng tăng lên, nhu cầu theo dõi vị trí của mọi
người xung quanh mình cũng được quan tâm tới nhiều hơn, mọi người cần một phần
mềm có thể theo dõi vị trí trong một nhóm.
• Người sử dụng cần một phần mềm có chức năng theo dõi vị trí của một nhóm
người.
• Người sử dụng cần một phần mềm để đi du lịch tìm được những con đường gắn
nhất, đẹp nhất, nhiều quán ăn, nơi ngủ nghỉ giá rẻ nhất…
• Người sử dụng cần một phần mềm tạo ra một mạng xã hội chia sẻ thông tin cho
những người đi du lịch bụi, giao lưu, kết bạn, trao đổi thông tin, chia sẻ ảnh
video…
Với những vấn đề đặt ra ở trên thôi thúc tôi xây dựng lên một phần mềm chạy trên điện
thoại thông minh giúp mọi người có thể dễ dàng theo dõi vị ví của nhau.
2. Đặc tả chức năng
2.1. Đăng ký
 Mô tả chức năng
Chức năng đăng ký tài khoản giúp người sử dụng có thể đăng ký một tài khoản mới.
 Mô tả hoạt động
1. Người sử dụng bật phần mềm, chọn chức năng đăng ký
2. Phần mềm yêu cầu người sử dụng nhập vào thông tin tài khoản
3. Người dùng nhập thông tin tài khoản vào form
4. Bấm vào nút đăng ký, dữ liệu được gửi tới server
5. Server xử lý dữ liệu, sau đó server sẽ thông báo lại cho người sử dụng đăng ký
thành công hay không
6. Nếu thành công thì chuyển sang màn hình đăng nhập, không thành công thông báo
lỗi
2.2. Đăng nhập
 Mô tả chức năng
Chức năng đăng nhập để xác thực quyền truy cập của người dùng, cũng như định danh
thông tin người dùng, sau khi đăng nhập người dùng mới tiếp tục sử dụng các chức năng
khác của ứng dụng
 Mô tả hoạt động
1. Người sử dụng vào chức năng đăng nhập
2. Phần mềm yêu cầu nhập thông tin tài khoản
3. Người dùng nhập thông tin tài khoản, sau đó bấm vào nút đăng nhập
4. Dữ liệu được gửi lên server, server kiểm tra trả về kết quả đăng nhập thành công,
hoặc không thành công
2.3. Tạo nhóm
 Mô tả chức năng
Chức năng tạo nhóm giúp người dùng tạo gia một nhóm có thể theo dõi vị trí của những
thành viên trong nhóm đó.
 Mô tả hoạt động
1. Người sử dụng vào menu, chọn xem nhóm, chọn chức năng tạo nhóm
2. Phần mềm yêu cầu nhập thông tin tạo nhóm
3. Người dùng nhập thông tin tạo nhóm xong, bấm nút tạo nhóm
4. Dữ liệu được gửi tới server
5. Server kiểm tra dữ liệu, đưa ra thông báo tạo nhóm thành công hoặc không thành
công
2.3. Xóa nhóm
 Mô tả chức năng
Chức năng giúp người sử dụng có thể xóa nhóm, không muốn theo dõi vị trí nữa
 Mô tả hoạt động
1. Người dùng vào xem nhóm
2. Người dùng chọn nút xóa nhóm
2.4. Sử dụng nhóm
 Mô tả chức năng
Chức năng này cho phép người sử dụng chọn nhóm, thay đổi các nhóm cần theo dõi vị trí
 Mô tả hoạt động
1. Chọn nhóm cần sử dụng để theo dõi vị trí, chỉ được theo dõi vị trí của một nhóm
trong cùng một thời điểm.
2. Hệ thống thông báo chọn nhóm thành công.
2.5. Xem vị trí
 Mô tả chức năng
Giúp người sử dụng có thể xem vi trí của mọi người trong một nhóm
 Mô tả hoạt động
1. Người dùng bật GPS, chọn cho phép lấy và gửi dữ liệu đi
2. Ứng dụng sẽ liên tục gửi dữ liệu lên server, đồng thời lấy dữ liệu về và vẽ liên tục
vị trí của mọi người trên bản đồ.
3. Các biểu đồ hệ thống
3.1. Biểu đồ UseCase
Mô hình Usecase dưsới đây thể hiện cho số lượng chức năng của hệ thống mà người
dùng có thể tương tác được trực tiếp.
3.1.1. UseCase đăng nhập, đăng ký
Giúp người sử dụng đăng nhập vào ứng dụng, sau đó sử dụng được các chức năng tiếp
theo.
3.1.2. UseCase myGroup
Giúp người sử dụng xem được tất cả các nhóm mà mình đã tham gia, và thêm được nhóm
mới cũng như, xóa được nhóm mà họ đã tham gia.
3.1.3. UseCase xem vị trí
Chức năng này giúp người sử dụng có thể gửi vị trí của mình lên server và lấy dữ liệu vị
trí của mọi người trong nhóm về.
3.2. Biểu đồ trình tự
3.2.1. Register
3.2.2. Login
3.2.3. ViewPosition
3.2.4. MyGroup
3.3. Biểu đồ lớp
3.3.1. ViewPosition
3.4. Biểu đồ hoạt động
3.4.1. LoginActivity
3.4.2. RegisterActivitys
3.4.3. ViewPositionActivity
CHƯƠNG 3: DEMO CHƯƠNG TRÌNH
1. Một số hình ảnh của ứng dụng
1.1. Cho phép sử dụng Gps trên android
Phần mềm của chúng ta cần sử dụng dữ liệu từ Gps lên cần phải bật Gps lên mới có thể
sử dụng được.
1.2. Đăng nhập
Chức năng giúp người dùng đăng nhập vào phần mềm.
1.3. Đăng ký
Giúp người sử dụng đăng ký tài khoản mới.
1.4. Xem nhóm
Giúp người sử dụng xem nhóm.
1.5. Tạo nhóm
Tạo một nhóm mới cho mọi người sử dụng.
1.6. Xem vị trí
Xem vị trí của mọi người trong một nhóm.
2. Đánh giá ứng dụng
2.1. Mục tiêu đạt được
Các chức năng chính Hoàn thành
Đăng nhập 100%
Đăng ký 100%
Xem nhóm 100%
Tạo nhóm 100%
Xem vị trí 100%
2.2. Các issue và bug chưa giải quyết
• Ứng dụng không chạy được đa nền tảng(issue)
Lý do: Do ứng dụng lập trình trên hệ điều hành android, lên chỉ chạy được trên các điện
thoại máy tính bảng sử dụng hệ điều hành android.
Hướng giải quyết: Chúng ta sẽ nâng cấp công nghệ cho ứng dụng này, như công nghệ lập
trình mobile hibernate, hoặc xamarin, sau khi sử dụng công nghệ này ứng dụng sẽ dễ
dàng hoạt động trên các nền tảng phổ biến như ios, android, winphone mobile, linux, …
• Ứng dụng trao đổi dữ liệu với server theo thời gian cố định lên sẽ tốn nhiều dữ
liệu để truyền tin(issue)
Lý do: Do ứng dụng sử dụng gửi và nhận dữ liệu theo thời gian, lên các request sẽ gửi
liên tục lên server và nhận dữ liệu trả về, làm tốn pin và dung lượng truyền tin.
Hướng giải quyết: Khi nâng cấp phiên bản sau, chúng ta sẽ sử dụng công nghệ socket,
websocket, lúc đó chúng ta sẽ quản lý các client tốt hơn, việc nhận gửi dữ liệu sẽ tiết
kiệm đáng kể dữ liệu cũng như lượng pin của thiết bị.
2.3. Hướng phát triển tương lai
• Sau khi khắc phục tốt các issue trên thì tôi sẽ phát triển phần mềm thành một phần
mềm giúp mọi người di du lịch có thể theo dõi vị trí của nhau.
• Giúp người đi du lịch có thể lưu lại những con đường họ đã đi qua và chia sẻ lên
mạng xã hội facebook, twitter, google+, …
• Có chức năng chia sẻ ảnh khi đang đi trên đường, cho mọi người đi du lịch qua
quãng đường đó có thể xem được.
• Phát triển phần mềm đa nền tảng cho mọi người đều có thể sử dụng được.
3. Kết luận
Sau khi thực hiện xong project này em đã nắm bắt được qui trình làm một dự án phần
mềm trên mobile nói chung đồng thời hiểu thêm được nhiều kiến thức về Android và các
công nghệ liên quan như là Mongodb, Spring boot, Json, Webservice, …
Tài liệu tham khảo
1. Website: https://spring.io/
2. Website: http://stackoverflow.com/
3. Website: http://o7planning.org/
4. Website: https://github.com/
5. Website: http://www.uml-diagrams.org/
6. Kênh Youtube: https://www.youtube.com/user/koushks
7. Website: https://www.ibm.com
8. Website: https://techmaster.vn

More Related Content

What's hot

Slide Báo Cáo Đồ Án Tốt Nghiệp CNTT
Slide Báo Cáo Đồ Án Tốt Nghiệp CNTTSlide Báo Cáo Đồ Án Tốt Nghiệp CNTT
Slide Báo Cáo Đồ Án Tốt Nghiệp CNTTHiệu Nguyễn
 
Báo cáo thực tập Athena - CNTT
Báo cáo thực tập Athena - CNTTBáo cáo thực tập Athena - CNTT
Báo cáo thực tập Athena - CNTTVu Tran
 
Các kỹ thuật bảo trì phần mềm
Các kỹ thuật bảo trì phần mềmCác kỹ thuật bảo trì phần mềm
Các kỹ thuật bảo trì phần mềmNguyễn Anh
 
Báo Cáo Đồ Án 2 : Thiết Kế Web Bán Đồng Hồ
Báo Cáo Đồ Án 2 : Thiết Kế Web Bán Đồng HồBáo Cáo Đồ Án 2 : Thiết Kế Web Bán Đồng Hồ
Báo Cáo Đồ Án 2 : Thiết Kế Web Bán Đồng HồzDollz Lovez
 
đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...
đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...
đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...Vi Thái
 
Do an xay_dung_website_thuong_mai_dien_tu
Do an xay_dung_website_thuong_mai_dien_tuDo an xay_dung_website_thuong_mai_dien_tu
Do an xay_dung_website_thuong_mai_dien_tuThiênĐàng CôngDân
 
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNGPHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNGThùy Linh
 
Báo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minh
Báo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minhBáo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minh
Báo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minhnataliej4
 
Báo cáo đồ án môn công nghệ phần mềm
Báo cáo đồ án môn công nghệ phần mềmBáo cáo đồ án môn công nghệ phần mềm
Báo cáo đồ án môn công nghệ phần mềmRiTa15
 
đồ áN xây dựng website bán laptop 1129155
đồ áN xây dựng website bán laptop 1129155đồ áN xây dựng website bán laptop 1129155
đồ áN xây dựng website bán laptop 1129155nataliej4
 
Phân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàngPhân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàngleemindinh
 
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngPhân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngNguyễn Danh Thanh
 

What's hot (20)

Slide Báo Cáo Đồ Án Tốt Nghiệp CNTT
Slide Báo Cáo Đồ Án Tốt Nghiệp CNTTSlide Báo Cáo Đồ Án Tốt Nghiệp CNTT
Slide Báo Cáo Đồ Án Tốt Nghiệp CNTT
 
Uml hà
Uml hàUml hà
Uml hà
 
Đề tài: Chương trình quản lý bán hàng theo chuỗi cung cấp, HAY
Đề tài: Chương trình quản lý bán hàng theo chuỗi cung cấp, HAYĐề tài: Chương trình quản lý bán hàng theo chuỗi cung cấp, HAY
Đề tài: Chương trình quản lý bán hàng theo chuỗi cung cấp, HAY
 
Đề tài: Áp dụng kỹ thuật trong Big data vào lưu trữ dữ liệu, HOT
Đề tài: Áp dụng kỹ thuật trong Big data vào lưu trữ dữ liệu, HOTĐề tài: Áp dụng kỹ thuật trong Big data vào lưu trữ dữ liệu, HOT
Đề tài: Áp dụng kỹ thuật trong Big data vào lưu trữ dữ liệu, HOT
 
Luận văn: Xây dựng ứng dụng Android xem video trực tuyến, HAY
Luận văn: Xây dựng ứng dụng Android xem video trực tuyến, HAYLuận văn: Xây dựng ứng dụng Android xem video trực tuyến, HAY
Luận văn: Xây dựng ứng dụng Android xem video trực tuyến, HAY
 
Báo cáo thực tập Athena - CNTT
Báo cáo thực tập Athena - CNTTBáo cáo thực tập Athena - CNTT
Báo cáo thực tập Athena - CNTT
 
Đề tài: Quản lí Tour du lịch, HAY, 9đ
Đề tài: Quản lí Tour du lịch, HAY, 9đĐề tài: Quản lí Tour du lịch, HAY, 9đ
Đề tài: Quản lí Tour du lịch, HAY, 9đ
 
Đề tài: Xây Dựng Chương Trình Quản Lý Nhà Hàng Coffee SEN
Đề tài: Xây Dựng Chương Trình Quản Lý Nhà Hàng Coffee SENĐề tài: Xây Dựng Chương Trình Quản Lý Nhà Hàng Coffee SEN
Đề tài: Xây Dựng Chương Trình Quản Lý Nhà Hàng Coffee SEN
 
Các kỹ thuật bảo trì phần mềm
Các kỹ thuật bảo trì phần mềmCác kỹ thuật bảo trì phần mềm
Các kỹ thuật bảo trì phần mềm
 
Báo Cáo Đồ Án 2 : Thiết Kế Web Bán Đồng Hồ
Báo Cáo Đồ Án 2 : Thiết Kế Web Bán Đồng HồBáo Cáo Đồ Án 2 : Thiết Kế Web Bán Đồng Hồ
Báo Cáo Đồ Án 2 : Thiết Kế Web Bán Đồng Hồ
 
đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...
đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...
đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...
 
Đề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đ
Đề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đĐề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đ
Đề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đ
 
Báo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin Tức
Báo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin TứcBáo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin Tức
Báo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin Tức
 
Do an xay_dung_website_thuong_mai_dien_tu
Do an xay_dung_website_thuong_mai_dien_tuDo an xay_dung_website_thuong_mai_dien_tu
Do an xay_dung_website_thuong_mai_dien_tu
 
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNGPHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
 
Báo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minh
Báo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minhBáo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minh
Báo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minh
 
Báo cáo đồ án môn công nghệ phần mềm
Báo cáo đồ án môn công nghệ phần mềmBáo cáo đồ án môn công nghệ phần mềm
Báo cáo đồ án môn công nghệ phần mềm
 
đồ áN xây dựng website bán laptop 1129155
đồ áN xây dựng website bán laptop 1129155đồ áN xây dựng website bán laptop 1129155
đồ áN xây dựng website bán laptop 1129155
 
Phân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàngPhân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàng
 
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngPhân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
 

Similar to Báo cáo thực tập chuyên nghành lập trình Android GPSGroup

Bao cao web cake php
Bao cao web cake phpBao cao web cake php
Bao cao web cake phplaonap166
 
Ứng dụng từ điển cho SmartPhone từ Framework PhoneGap trên nền tảng Android
Ứng dụng từ điển cho SmartPhone từ Framework PhoneGap trên nền tảng Android Ứng dụng từ điển cho SmartPhone từ Framework PhoneGap trên nền tảng Android
Ứng dụng từ điển cho SmartPhone từ Framework PhoneGap trên nền tảng Android Lương Bá Hợp
 
429157477-Slide-Bao-Cao.pdf
429157477-Slide-Bao-Cao.pdf429157477-Slide-Bao-Cao.pdf
429157477-Slide-Bao-Cao.pdfToNguyen16
 
Cấu trúc android
Cấu trúc androidCấu trúc android
Cấu trúc androiddhinh_190192
 
Spring framework
Spring frameworkSpring framework
Spring frameworkAn Nguyen
 
(HoaND) giao trinh webservice
(HoaND) giao trinh webservice (HoaND) giao trinh webservice
(HoaND) giao trinh webservice Duc Hoa
 
Báo cáo kĩ thuật phần mềm và ứng dụng
Báo cáo kĩ thuật phần mềm và ứng dụngBáo cáo kĩ thuật phần mềm và ứng dụng
Báo cáo kĩ thuật phần mềm và ứng dụngVượng Đặng
 
Giới thiệu NukeViet 5 và Autoweb
Giới thiệu NukeViet 5 và AutowebGiới thiệu NukeViet 5 và Autoweb
Giới thiệu NukeViet 5 và Autowebvinades
 
Câu hỏi phỏng vấn.pdf
Câu hỏi phỏng vấn.pdfCâu hỏi phỏng vấn.pdf
Câu hỏi phỏng vấn.pdfGrowup Work
 
Tìm đường trên di động (PhoneGap)
Tìm đường trên di động (PhoneGap)Tìm đường trên di động (PhoneGap)
Tìm đường trên di động (PhoneGap)Lương Bá Hợp
 
Các nguyên lý Hướng đối tượng
Các nguyên lý Hướng đối tượngCác nguyên lý Hướng đối tượng
Các nguyên lý Hướng đối tượngTam Thanh
 
Báo cáo thực tập cơ sở
Báo cáo thực tập cơ sởBáo cáo thực tập cơ sở
Báo cáo thực tập cơ sởNguyễn Phú
 
Sử dụng API Leaflet chi tiết các chức năng
Sử dụng API Leaflet chi tiết các chức năngSử dụng API Leaflet chi tiết các chức năng
Sử dụng API Leaflet chi tiết các chức năngHao CT
 
123doc-giai-ngan-hang-cong-nghe-phan-mem-ptit.pdf
123doc-giai-ngan-hang-cong-nghe-phan-mem-ptit.pdf123doc-giai-ngan-hang-cong-nghe-phan-mem-ptit.pdf
123doc-giai-ngan-hang-cong-nghe-phan-mem-ptit.pdfDuongDo35
 
Báo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mởBáo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mởThuyet Nguyen
 
Phan tich httt_bang_uml
Phan tich httt_bang_umlPhan tich httt_bang_uml
Phan tich httt_bang_umlMai Mit
 
Phan tich httt_bang_uml
Phan tich httt_bang_umlPhan tich httt_bang_uml
Phan tich httt_bang_umlAxnet Dung
 
Phan tich hệ thống thông tin bằng uml
Phan tich hệ thống thông tin bằng umlPhan tich hệ thống thông tin bằng uml
Phan tich hệ thống thông tin bằng umldlmonline24h
 

Similar to Báo cáo thực tập chuyên nghành lập trình Android GPSGroup (20)

Bao cao web cake php
Bao cao web cake phpBao cao web cake php
Bao cao web cake php
 
Ứng dụng từ điển cho SmartPhone từ Framework PhoneGap trên nền tảng Android
Ứng dụng từ điển cho SmartPhone từ Framework PhoneGap trên nền tảng Android Ứng dụng từ điển cho SmartPhone từ Framework PhoneGap trên nền tảng Android
Ứng dụng từ điển cho SmartPhone từ Framework PhoneGap trên nền tảng Android
 
429157477-Slide-Bao-Cao.pdf
429157477-Slide-Bao-Cao.pdf429157477-Slide-Bao-Cao.pdf
429157477-Slide-Bao-Cao.pdf
 
Cấu trúc android
Cấu trúc androidCấu trúc android
Cấu trúc android
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
(HoaND) giao trinh webservice
(HoaND) giao trinh webservice (HoaND) giao trinh webservice
(HoaND) giao trinh webservice
 
Báo cáo kĩ thuật phần mềm và ứng dụng
Báo cáo kĩ thuật phần mềm và ứng dụngBáo cáo kĩ thuật phần mềm và ứng dụng
Báo cáo kĩ thuật phần mềm và ứng dụng
 
Giới thiệu NukeViet 5 và Autoweb
Giới thiệu NukeViet 5 và AutowebGiới thiệu NukeViet 5 và Autoweb
Giới thiệu NukeViet 5 và Autoweb
 
Câu hỏi phỏng vấn.pdf
Câu hỏi phỏng vấn.pdfCâu hỏi phỏng vấn.pdf
Câu hỏi phỏng vấn.pdf
 
Tìm đường trên di động (PhoneGap)
Tìm đường trên di động (PhoneGap)Tìm đường trên di động (PhoneGap)
Tìm đường trên di động (PhoneGap)
 
Các nguyên lý Hướng đối tượng
Các nguyên lý Hướng đối tượngCác nguyên lý Hướng đối tượng
Các nguyên lý Hướng đối tượng
 
Nguyen lyoop
Nguyen lyoopNguyen lyoop
Nguyen lyoop
 
Báo cáo thực tập cơ sở
Báo cáo thực tập cơ sởBáo cáo thực tập cơ sở
Báo cáo thực tập cơ sở
 
Sử dụng API Leaflet chi tiết các chức năng
Sử dụng API Leaflet chi tiết các chức năngSử dụng API Leaflet chi tiết các chức năng
Sử dụng API Leaflet chi tiết các chức năng
 
Sof301 slide1
Sof301   slide1Sof301   slide1
Sof301 slide1
 
123doc-giai-ngan-hang-cong-nghe-phan-mem-ptit.pdf
123doc-giai-ngan-hang-cong-nghe-phan-mem-ptit.pdf123doc-giai-ngan-hang-cong-nghe-phan-mem-ptit.pdf
123doc-giai-ngan-hang-cong-nghe-phan-mem-ptit.pdf
 
Báo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mởBáo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mở
 
Phan tich httt_bang_uml
Phan tich httt_bang_umlPhan tich httt_bang_uml
Phan tich httt_bang_uml
 
Phan tich httt_bang_uml
Phan tich httt_bang_umlPhan tich httt_bang_uml
Phan tich httt_bang_uml
 
Phan tich hệ thống thông tin bằng uml
Phan tich hệ thống thông tin bằng umlPhan tich hệ thống thông tin bằng uml
Phan tich hệ thống thông tin bằng uml
 

Recently uploaded

Hoàn thiện công tác kiểm soát chi NSNN qua Kho bạc Nhà nước huyện Tri Tôn – t...
Hoàn thiện công tác kiểm soát chi NSNN qua Kho bạc Nhà nước huyện Tri Tôn – t...Hoàn thiện công tác kiểm soát chi NSNN qua Kho bạc Nhà nước huyện Tri Tôn – t...
Hoàn thiện công tác kiểm soát chi NSNN qua Kho bạc Nhà nước huyện Tri Tôn – t...lamluanvan.net Viết thuê luận văn
 
Luận văn 2024 Tạo động lực lao động tại khối cơ quan Tập đoàn Viễn thông Quân...
Luận văn 2024 Tạo động lực lao động tại khối cơ quan Tập đoàn Viễn thông Quân...Luận văn 2024 Tạo động lực lao động tại khối cơ quan Tập đoàn Viễn thông Quân...
Luận văn 2024 Tạo động lực lao động tại khối cơ quan Tập đoàn Viễn thông Quân...lamluanvan.net Viết thuê luận văn
 
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...Nguyen Thanh Tu Collection
 
NHững vấn đề chung về Thuế Tiêu thụ đặc biệt.ppt
NHững vấn đề chung về Thuế Tiêu thụ đặc biệt.pptNHững vấn đề chung về Thuế Tiêu thụ đặc biệt.ppt
NHững vấn đề chung về Thuế Tiêu thụ đặc biệt.pptphanai
 
Báo cáo tốt nghiệp Đánh giá thực trạng an toàn vệ sinh lao động và rủi ro lao...
Báo cáo tốt nghiệp Đánh giá thực trạng an toàn vệ sinh lao động và rủi ro lao...Báo cáo tốt nghiệp Đánh giá thực trạng an toàn vệ sinh lao động và rủi ro lao...
Báo cáo tốt nghiệp Đánh giá thực trạng an toàn vệ sinh lao động và rủi ro lao...lamluanvan.net Viết thuê luận văn
 
Luận văn 2024 Tạo động lực lao động tại Trung tâm nghiên cứu gia cầm Thụy Phương
Luận văn 2024 Tạo động lực lao động tại Trung tâm nghiên cứu gia cầm Thụy PhươngLuận văn 2024 Tạo động lực lao động tại Trung tâm nghiên cứu gia cầm Thụy Phương
Luận văn 2024 Tạo động lực lao động tại Trung tâm nghiên cứu gia cầm Thụy Phươnglamluanvan.net Viết thuê luận văn
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
Nhân vật người mang lốt cóc trong truyện cổ tích thần kỳ Việt Nam
Nhân vật người mang lốt cóc trong truyện cổ tích thần kỳ Việt NamNhân vật người mang lốt cóc trong truyện cổ tích thần kỳ Việt Nam
Nhân vật người mang lốt cóc trong truyện cổ tích thần kỳ Việt Namlamluanvan.net Viết thuê luận văn
 
Bài học phòng cháy chữa cháy - PCCC tại tòa nhà
Bài học phòng cháy chữa cháy - PCCC tại tòa nhàBài học phòng cháy chữa cháy - PCCC tại tòa nhà
Bài học phòng cháy chữa cháy - PCCC tại tòa nhàNguyen Thi Trang Nhung
 
Quản trị cơ sở Giáo dục nghề nghiệp
Quản trị cơ sở Giáo dục nghề nghiệpQuản trị cơ sở Giáo dục nghề nghiệp
Quản trị cơ sở Giáo dục nghề nghiệpaminh0502
 
Giáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdf
Giáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdfGiáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdf
Giáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdf4pdx29gsr9
 
NHKTS SLIDE B2 KHAI NIEM FINTECH VA YEU TO CUNG CAU DOI MOI TRONG CN_GV HANG ...
NHKTS SLIDE B2 KHAI NIEM FINTECH VA YEU TO CUNG CAU DOI MOI TRONG CN_GV HANG ...NHKTS SLIDE B2 KHAI NIEM FINTECH VA YEU TO CUNG CAU DOI MOI TRONG CN_GV HANG ...
NHKTS SLIDE B2 KHAI NIEM FINTECH VA YEU TO CUNG CAU DOI MOI TRONG CN_GV HANG ...songtoan982017
 
Mở rộng hoạt động cho vay tiêu dùng tại Ngân hàng TMCP Hàng Hải Việt Nam (Mar...
Mở rộng hoạt động cho vay tiêu dùng tại Ngân hàng TMCP Hàng Hải Việt Nam (Mar...Mở rộng hoạt động cho vay tiêu dùng tại Ngân hàng TMCP Hàng Hải Việt Nam (Mar...
Mở rộng hoạt động cho vay tiêu dùng tại Ngân hàng TMCP Hàng Hải Việt Nam (Mar...lamluanvan.net Viết thuê luận văn
 
35 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH NĂM ...
35 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH NĂM ...35 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH NĂM ...
35 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH NĂM ...Nguyen Thanh Tu Collection
 
TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...
TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...
TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...Nguyen Thanh Tu Collection
 
XÂY DỰNG KẾ HOẠCH KINH DOANH CHO CÔNG TY KHÁCH SẠN SÀI GÒN CENTER ĐẾN NĂM 2025
XÂY DỰNG KẾ HOẠCH KINH DOANH CHO CÔNG TY KHÁCH SẠN SÀI GÒN CENTER ĐẾN NĂM 2025XÂY DỰNG KẾ HOẠCH KINH DOANH CHO CÔNG TY KHÁCH SẠN SÀI GÒN CENTER ĐẾN NĂM 2025
XÂY DỰNG KẾ HOẠCH KINH DOANH CHO CÔNG TY KHÁCH SẠN SÀI GÒN CENTER ĐẾN NĂM 2025lamluanvan.net Viết thuê luận văn
 
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận HạnTử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận HạnKabala
 
GIỮ GÌN VÀ PHÁT HUY GIÁ TRỊ MỘT SỐ BÀI HÁT DÂN CA CÁC DÂN TỘC BẢN ĐỊA CHO HỌC...
GIỮ GÌN VÀ PHÁT HUY GIÁ TRỊ MỘT SỐ BÀI HÁT DÂN CA CÁC DÂN TỘC BẢN ĐỊA CHO HỌC...GIỮ GÌN VÀ PHÁT HUY GIÁ TRỊ MỘT SỐ BÀI HÁT DÂN CA CÁC DÂN TỘC BẢN ĐỊA CHO HỌC...
GIỮ GÌN VÀ PHÁT HUY GIÁ TRỊ MỘT SỐ BÀI HÁT DÂN CA CÁC DÂN TỘC BẢN ĐỊA CHO HỌC...lamluanvan.net Viết thuê luận văn
 

Recently uploaded (20)

Hoàn thiện công tác kiểm soát chi NSNN qua Kho bạc Nhà nước huyện Tri Tôn – t...
Hoàn thiện công tác kiểm soát chi NSNN qua Kho bạc Nhà nước huyện Tri Tôn – t...Hoàn thiện công tác kiểm soát chi NSNN qua Kho bạc Nhà nước huyện Tri Tôn – t...
Hoàn thiện công tác kiểm soát chi NSNN qua Kho bạc Nhà nước huyện Tri Tôn – t...
 
Luận văn 2024 Tạo động lực lao động tại khối cơ quan Tập đoàn Viễn thông Quân...
Luận văn 2024 Tạo động lực lao động tại khối cơ quan Tập đoàn Viễn thông Quân...Luận văn 2024 Tạo động lực lao động tại khối cơ quan Tập đoàn Viễn thông Quân...
Luận văn 2024 Tạo động lực lao động tại khối cơ quan Tập đoàn Viễn thông Quân...
 
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
 
NHững vấn đề chung về Thuế Tiêu thụ đặc biệt.ppt
NHững vấn đề chung về Thuế Tiêu thụ đặc biệt.pptNHững vấn đề chung về Thuế Tiêu thụ đặc biệt.ppt
NHững vấn đề chung về Thuế Tiêu thụ đặc biệt.ppt
 
Báo cáo tốt nghiệp Đánh giá thực trạng an toàn vệ sinh lao động và rủi ro lao...
Báo cáo tốt nghiệp Đánh giá thực trạng an toàn vệ sinh lao động và rủi ro lao...Báo cáo tốt nghiệp Đánh giá thực trạng an toàn vệ sinh lao động và rủi ro lao...
Báo cáo tốt nghiệp Đánh giá thực trạng an toàn vệ sinh lao động và rủi ro lao...
 
Luận văn 2024 Tạo động lực lao động tại Trung tâm nghiên cứu gia cầm Thụy Phương
Luận văn 2024 Tạo động lực lao động tại Trung tâm nghiên cứu gia cầm Thụy PhươngLuận văn 2024 Tạo động lực lao động tại Trung tâm nghiên cứu gia cầm Thụy Phương
Luận văn 2024 Tạo động lực lao động tại Trung tâm nghiên cứu gia cầm Thụy Phương
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Nhân vật người mang lốt cóc trong truyện cổ tích thần kỳ Việt Nam
Nhân vật người mang lốt cóc trong truyện cổ tích thần kỳ Việt NamNhân vật người mang lốt cóc trong truyện cổ tích thần kỳ Việt Nam
Nhân vật người mang lốt cóc trong truyện cổ tích thần kỳ Việt Nam
 
Bài học phòng cháy chữa cháy - PCCC tại tòa nhà
Bài học phòng cháy chữa cháy - PCCC tại tòa nhàBài học phòng cháy chữa cháy - PCCC tại tòa nhà
Bài học phòng cháy chữa cháy - PCCC tại tòa nhà
 
Quản trị cơ sở Giáo dục nghề nghiệp
Quản trị cơ sở Giáo dục nghề nghiệpQuản trị cơ sở Giáo dục nghề nghiệp
Quản trị cơ sở Giáo dục nghề nghiệp
 
Giáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdf
Giáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdfGiáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdf
Giáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdf
 
TIỂU LUẬN MÔN PHƯƠNG PHÁP NGHIÊN CỨU KHOA HỌC
TIỂU LUẬN MÔN PHƯƠNG PHÁP NGHIÊN CỨU KHOA HỌCTIỂU LUẬN MÔN PHƯƠNG PHÁP NGHIÊN CỨU KHOA HỌC
TIỂU LUẬN MÔN PHƯƠNG PHÁP NGHIÊN CỨU KHOA HỌC
 
NHKTS SLIDE B2 KHAI NIEM FINTECH VA YEU TO CUNG CAU DOI MOI TRONG CN_GV HANG ...
NHKTS SLIDE B2 KHAI NIEM FINTECH VA YEU TO CUNG CAU DOI MOI TRONG CN_GV HANG ...NHKTS SLIDE B2 KHAI NIEM FINTECH VA YEU TO CUNG CAU DOI MOI TRONG CN_GV HANG ...
NHKTS SLIDE B2 KHAI NIEM FINTECH VA YEU TO CUNG CAU DOI MOI TRONG CN_GV HANG ...
 
Mở rộng hoạt động cho vay tiêu dùng tại Ngân hàng TMCP Hàng Hải Việt Nam (Mar...
Mở rộng hoạt động cho vay tiêu dùng tại Ngân hàng TMCP Hàng Hải Việt Nam (Mar...Mở rộng hoạt động cho vay tiêu dùng tại Ngân hàng TMCP Hàng Hải Việt Nam (Mar...
Mở rộng hoạt động cho vay tiêu dùng tại Ngân hàng TMCP Hàng Hải Việt Nam (Mar...
 
35 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH NĂM ...
35 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH NĂM ...35 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH NĂM ...
35 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH NĂM ...
 
TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...
TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...
TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...
 
XÂY DỰNG KẾ HOẠCH KINH DOANH CHO CÔNG TY KHÁCH SẠN SÀI GÒN CENTER ĐẾN NĂM 2025
XÂY DỰNG KẾ HOẠCH KINH DOANH CHO CÔNG TY KHÁCH SẠN SÀI GÒN CENTER ĐẾN NĂM 2025XÂY DỰNG KẾ HOẠCH KINH DOANH CHO CÔNG TY KHÁCH SẠN SÀI GÒN CENTER ĐẾN NĂM 2025
XÂY DỰNG KẾ HOẠCH KINH DOANH CHO CÔNG TY KHÁCH SẠN SÀI GÒN CENTER ĐẾN NĂM 2025
 
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận HạnTử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
 
GIỮ GÌN VÀ PHÁT HUY GIÁ TRỊ MỘT SỐ BÀI HÁT DÂN CA CÁC DÂN TỘC BẢN ĐỊA CHO HỌC...
GIỮ GÌN VÀ PHÁT HUY GIÁ TRỊ MỘT SỐ BÀI HÁT DÂN CA CÁC DÂN TỘC BẢN ĐỊA CHO HỌC...GIỮ GÌN VÀ PHÁT HUY GIÁ TRỊ MỘT SỐ BÀI HÁT DÂN CA CÁC DÂN TỘC BẢN ĐỊA CHO HỌC...
GIỮ GÌN VÀ PHÁT HUY GIÁ TRỊ MỘT SỐ BÀI HÁT DÂN CA CÁC DÂN TỘC BẢN ĐỊA CHO HỌC...
 
Trích dẫn theo Harvard với Microsoft Word
Trích dẫn theo Harvard với Microsoft WordTrích dẫn theo Harvard với Microsoft Word
Trích dẫn theo Harvard với Microsoft Word
 

Báo cáo thực tập chuyên nghành lập trình Android GPSGroup

  • 1. LỜI MỞ ĐẦU Mạng điện thoại di động xuất hiện tại Việt Nam từ đầu những năm 1990 và theo thời gian số lượng các thuê bao cũng như các nhà cung cấp dịch vụ di động tại Việt Nam ngày càng tăng. Do nhu cầu trao đổi thông tin ngày càng tăng và nhu cầu sử dụng sản phẩm công nghệ cao nhiều tính năng, cấu hình cao, chất lượng tốt, kiểu dáng mẫu mã đẹp, phong phú nên nhà cung cấp phải luôn cải thiện, nâng cao những sản phẩm của mình. Do đó viêc xây dựng các ứng dụng cho điện thoại di động đang là một nghành công nghiệp mới đầy tiềm năng và hứa hẹn nhiều sự phát triển vượt bậc của nghành khoa học kỹ thuật. Cùng với sự phát triển mạnh mẽ của xu hướng lập trình phần mềm ứng dụng cho các thiết bị di động. Phần mềm, ứng dụng cho điện thoại di động hiện nay rất đa dạng và phong phú trên các hệ điều hành di động cũng phát triển mạnh mẽ và đang thay đổi theo từng ngày. Các hệ điều hành Winphone Mobile, Android, IOS, Tizen, Ubuntu, rất phát triển trên thị trường di động. Trong vài năm gần đây, hệ điều hành Android ra đời với sự kế thừa những ưu việt của các hệ điều hành ra đời trước và sự kết hợp của nhiều công nghệ tiên tiến nhất hiện nay, đã được nhà phát triển công nghệ rất nổi tiếng hiện nay là Google phát triển. Android đã nhanh chóng là đối thủ cạnh tranh mạnh mẽ với các hệ điều hành trước đó và đang là hệ điều hành di động của tương lai và được nhiều người sử dụng nhất. Hiện nay, việc sở hữu một chiếc điện thoại thông minh không còn là một điều quá khó với nhiều người, khi ai cũng có cho riêng mình một chiếc điện thoại thông minh thì việc sử dụng nó để phục vụ cho cuộc sống là một điều tất yếu. Mỗi chiếc điện thoại thông minh đều có tích hợp GPS, và có sẵn phần mềm bản đồ giúp chúng ta xác định vị trí hiện tại của mình, tìm đường đi, tìm cây xăng, tìm quán ăn, dẫn đường…
  • 2. Các phần mềm bản đồ hỗ trợ sẵn rất nhiều chức năng có ích, nhưng họ lại chưa tập chung vào các chức năng: Theo dõi vị trí của nhiều người trong một nhóm Giúp người dùng đi du lịch tìm được những con đường gắn nhất, đẹp nhất, nhiều quán ăn, nơi ngủ nghỉ giá rẻ nhất… Tạo ra một mạng xã hội chia sẻ thông tin cho những người đi du lịch bụi, giao lưu, kết bạn, trao đổi thông tin, chia sẻ ảnh video… Với những vấn đề đặt ra ở trên thôi thúc tôi xây dựng lên một phần mềm chạy trên điện thoại thông minh giúp mọi người có thể dễ dàng theo dõi vị ví của nhau.
  • 3. CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1. Tìm hiểu về spring framework 1.1. Spring là gì? Spring framework, hay ngắn hơn là Spring, là một cấu trúc dùng để xây dựng chương trình ứng dụng mã nguồn mở dành cho ngôn ngữ lập trình Java. Phiên bản đầu tiên của nó do Rod Johnson viết và đã được ông xuất bản cùng với quyển sách đầu tay Expert One-on-One JavaEE Design and Development (Nhà xuất bản Wrox Press, Tháng 10 năm 2002). Kiến trúc của Spring framework được ra mắt công chúng lần đầu tiên hồi tháng 6 năm 2003 dưới Giấy phép Apache - phiên bản 2.0. Phiên bản 1.0 đánh dấu mốc thành tháng 3 năm 2005. Tuy Spring framework không bắt buộc người ta phải tuân theo một mô hình lập trình cụ thể nào, song nó lan truyền rộng rải trong cộng đồng những người viết chương trình dùng Java, như một hình thức chủ yếu thay thế cho mô hình Enterprise Java Bean. Theo thiết kế, bộ framework này giải phóng lập trình viên dùng Java, cho phép họ nhiều quyền tự do hơn và đồng thời cung cấp một giải pháp tiện lợi, đầy đủ dẫn chứng bằng tài liệu, dễ dàng sử dụng, phù hợp với những thực hành thông dụng trong công nghệ phần mềm. Bên cạnh những đặc trưng nền tảng của Spring framework là những cái có thể dùng được trong bất cứ một chương trình ứng dụng Java nào, rất nhiều các mở rộng và tiến bộ trong việc kiến tạo các trình ứng dụng dành cho nền tảng mạng web (web-based
  • 4. application) dựa trên nền Java Enterprise cũng tồn tại nữa. Spring framework nổi tiếng cũng một phần do chính đặc thù kể trên và được giới thương mại công nhận như một nền tảng kiến trúc có tầm quan trọng trong chiến lược kiến tạo phần mềm.
  • 5. 1.2. Lịch sử phát triển Spring Phần đầu tiên của Spring framework ban đầu nguyên được Rod Johnson viết vào năm 2000. Vào năm 2001, những mô hình lập trình cho các trình ứng dụng Web được đại đa số sử dụng đều do Java Servlet API và Enterprise Java Bean cung cấp. Năm 2003 thành lập dự án phát tại Sourceforge để phát triển Spring. Sau khi phát triển trên nền tảng ban đầu hơn một năm họ đã phát hành phiên bản đầu tiên (1.0) vào tháng 3 năm 2004. Spring framework đã làm cho những kỹ thuật vốn không được biết đến mấy trở nên những kỹ thuật được mọi người ưa chuộng trong một thời gian ngắn ngủi. Một trong những kỹ thuật nổi tiếng hơn cả là kỹ thuật “đảo ngược quyền điều khiển” (Inversion of Control, IoC). Năm 2005 cho thấy mức độ hưởng ứng nâng cao hơn những năm trước, nguyên do cũng vì những phiên bản mới được giới thiệu với những cột mốc đáng kể và những tính năng mới được thêm vào. Diễn đàn Spring (Spring Forum) ra đời cuối năm 2004 đến nay đã sinh trưởng trở thành một nguồn thông tin quan trọng, giúp đỡ cho người sử dụng. Vào tháng 12 năm 2005, hội thảo đầu tiên về Spring Framework đã được tổ chức ở Antwerp vào tháng 6 năm 2006, thu hút hơn 400 người. 1.3. Một số khái niệm chính Hai trong những thành phần chủ chốt và là nền tảng tạo nên sức mạnh của Spring
  • 6. chính là IoC và DI. 1.3.1. Inversion of Control (IoC) IoC Container trong Spring được xây dựng dựa trên nguyên lý Inversion of Control (đảo ngược điều khiển) đã xuất hiện khá lâu trong các mẫu hình thiết kế (design pattern), và được phổ biến rộng rãi nhờ Robert C. Martin và Martin Fowler. Để hiểu về Spring, trước tiên chúng ta cần hiểu khái niệm IoC là gì? Muốn vậy, chúng ta cần trả lời câu hỏi: Control (điều khiển) trong chương trình phần mềm là gì, và Inversion (sự đảo ngược) đối với điều khiển trong ngữ cảnh này được hiểu như thế nào? Khái niệm Control Flow (tạm dịch là luồng thực thi) được sử dụng cho trình tự thực hiện các câu lệnh, chỉ thị hoặc lời gọi hàm trong một chương trình, khi chương trình này thực thi. Do chương trình ngày càng phức tạp, nên các lập trình viên áp dụng phương pháp lập trình hướng đối tượng nhằm phân loại, chia tách các chức năng và gom thành các đối tượng. Các lập trình viên còn tạo dựng các thư viện tạo sẵn để có thể sử dụng lại. Luồng thực thi của chương trình, trong những tình huống cần xem xét ở mức tổng thể, không còn quan tâm đến các bước thực thi câu lệnh cụ thể nữa, mà chỉ xem xét đến quá trình gọi phương thức của các đối tượng trong ứng dụng cũng như các đối tượng của thư viện dựng sẵn. Các lập trình viên, khi xây dựng ứng dụng từ đầu, đã thực hiện hai nhiệm vụ: trực tiếp điều khiển luồng thực thi của chương trình và xây dựng các chức năng để đáp ứng nghiệp vụ của ứng dụng. Thực tế, có nhiều chương trình hoặc bộ phận trong chương
  • 7. trình có luồng thực thi rất giống nhau, chẳng hạn phần tương tác với HTTP trong các ứng dụng web, phần unit testing trong các ứng dụng,… Việc trực tiếp tạo dựng và kiểm soát luồng thực thi của chương trình lặp đi lặp lại khi xây dựng nhiều ứng dụng sẽ làm mất nhiều công sức, chi phí, tạo ra sự nhàm chán và dễ phát sinh lỗi. Điều này tạo ra động lực cũng như môi trường để nguyên lý đảo ngược điều khiển nảy nở và phát triển. Vậy sự “đảo ngược” (inversion) luồng điều khiển chương trình trong ngữ cảnh này được hiểu như thế nào? Chúng ta hãy xem xét 2 ví dụ dưới đây. Ví dụ 1: Ứng dụng web trong Java với JavaServlet Khi lập trình ứng dụng web bằng JavaServlet cần thực hiện các bước lập trình như sau: - Tạo lớp đối tượng kế thừa từ HttpServlet, override các phương thức doGet(), doPost(),… - Đăng ký trong file cấu hình Deployment Descriptor tương ứng Servlet này với đường dẫn xác định. - Lớp đối tượng Servlet chúng ta tạo ra sẽ được gọi đến khi có một truy vấn Descriptor. Vậy ai kích hoạt ứng dụng chúng ta viết để đáp ứng mỗi khi có HTTP Request gửi đến? Ai chịu trách nhiệm chuyển đổi các thông điệp HTTP (HTTP Request và HTTP Response) thành các đối tượng Java (HttpServletRequest và HttpServletResponse) để truyền cho các hàm doGet(), doPost()?
  • 8. Trong quá trình phát triển các thành phần chức năng của ứng dụng, chúng ta thường ứng dụng được mở rộng và phát triển thêm. Để tạo bộ unit test, chúng ta chỉ cần tạo một lớp đối tượng, định nghĩa các phương thức khởi tạo, phương thức kết thúc và các phương Việc điều khiển trình tự thực thi các phương thức được giao cho thư viện bên ngoài đảm nhiệm chẳng hạn như TestNG hoặc JUnit. trò. Ứng dụng không còn ôm đồm vừa trực tiếp tạo dựng và kiểm soát luồng thực thi, vừa xây dựng chức năng nghiệp vụ. Việc kiểm soát luồng thực thi được tách khỏi chức năng nghiệp vụ và bị đẩy ra bên ngoài. Người lập trình đã ủy thác việc kiểm soát luồng thực thi ứng dụng cho một thành phần (thường là thư viện dựng sẵn) bên ngoài đảm nhiệm, chỉ còn tập trung vào chức năng chính của ứng dụng. Như vậy, khái niệm “đảo ngược” ở đây chính là chuyển nhiệm vụ kiểm soát lưu trình thực thi từ ứng dụng cho một thành phần chuyên trách (thường là một thư viện phần mềm khung – framework – dựng sẵn ở bên ngoài). Ứng dụng chính chúng ta quan tâm phát triển không kiểm soát việc điều khiển luồng thực thi nữa, mà chỉ tập trung vào việc định nghĩa chức năng. Thư viện phần mềm khung chuyên trách kiểm soát điều khiển sẽ dựa trên mô tả trong cấu hình của ứng dụng để thay mặt ứng dụng điều phối luồng thực thi trong chương trình. Dễ dàng nhận thấy thư viện phần mềm khung này khác với các thư viện thông
  • 9. thường ở chỗ: thư viện thông thường cung cấp các chức năng và chờ được ứng dụng gọi đến, còn thư viện phần mềm khung tạo dựng luồng thực thi và gọi đến các chức năng của ứng dụng. Nói một cách ngắn gọn IoC là một design pattern và tập hợp các kỹ thuật lập trình truyền thống [4, tr1]. IoC trong Spring cũng hoàn toàn mang ý nghĩa như trên. Trong Spring các đối tượng chính để xây dựng ứng dụng thì được quản lý bởi Spring IoC một đối tượng được khởi tạo và quản lý bởi Spring IoC container. 1.3.2. Dependency Injection (DI) chính là việc các thuộc tính trong một đối tượng được “tiêm chích” (injection) để tham chiếu lần lượt đến các đối tượng khác. Dependency Injection trong Spring hoạt động dựa trên Java Reflection. 2. Tìm hiểu về Spring Boot 2.1. Spring boot là gì? Spring Boot là một Project nằm trên tầng IO Execution (Tầng thực thi) của Spring IO Framework. Spring Boot là một bước tiếp theo của Spring, để làm cho Spring dễ dàng hơn trong việc thiết lập và phát triển ứng dụng. Với Spring Boot các cấu hình Spring được giảm thiểu tối đa. Spring Boot hỗ trợ các bộ chứa nhúng (embedded containers) điều này cho phép các ứng dụng web có thể chạy độc lập mà không cần phải trên khai lên các Web Server.
  • 10. Bạn có thể dùng spring boot để tạo ứng dụng Java Web chạy bằng command line 'java -jar' hoặc xuất khẩu ra file war để triển khai lên Web Server như thông thường. Spring Boot cung cấp cho bạn một "CLI Tool" để chạy các kịch bản Spring (spring scripts). Spring Boot có thể giải thích một cách đơn giản bởi hình minh họa dưới đây: 2.2. Ưu điểm của spring boot Nó rất dễ dàng để phát triển các ứng dụng dựa trên Spring với Java hoặc Groovy. Nó giảm thiểu thời gian phát triển và tăng năng xuất Nó tránh việc phải viết nhiều mã nguyên mẫu (boilerplate Code), Annotations và các cấu hình XML. Nó dễ dàng để bạn tương tác các ứng dụng Spring Boot với các hệ sinh thái của Spring như Spring JDBC, Spring ORM, Spring Data, Spring Security etc. Nó đi theo cách tiếp cận “Nguyên tắc cấu hình mặc định” để giảm thiểu thời gian và nỗ lực cần thiết để phát triển ứng dụng. Nó cung cấp các Server nhúng (Embedded HTTP servers) như là Tomcat, Jetty .... để phát triển và test các ứng dụng web nhanh chóng và dễ dàng. Nó cung cấp công cụ CLI (Command Line Interface) dể phát triển và test các ứng dụng Spring Boot (Java hoặc Groovy) từ các dòng lệnh (command prompt) rất dễ dàng và nhanh chóng. Nó cung cấp rất nhiều các plugin để phát triển và test các ứng dụng Spring Boot nhanh chóng sử dụng các công cụ Build như Maven và Gradle
  • 11. Nó cung cấp nhiều plugin để làm việc với các các bộ nhúng và các Database lưu trữ trên bộ nhớ (in-memory Databases) một cách dễ dàng. 2.3. RESTful Web Service 2.3.1. RESTful là gì? Những khái niệm đầu tiên về REST (REpresentational State Transfer) được đưa ra vào năm 2000 trong luận văn tiến sĩ của Roy Thomas Fielding (đồng sáng lập giao thức HTTP). Trong luận văn ông giới thiệu khá chi tiết về các ràng buộc, quy ước cũng như cách thức thực hiện với hệ thống để có được một hệ thống REST. Hiểu đơn giản nó là một bộ các ràng buộc và quy ước, khi áp dụng đầy đủ vào hệ thống của bạn thì ta có 1 hệ thống REST. REST Contraints • Hệ thống hoạt động theo mô hình client-server, trong đó server là tập hợp các service nhỏ lắng nghe các request từ client. Với từng request khác nhau thì có thể một hoặc nhiều service xử lý. • Stateless (phi trạng thái). Đơn giản server và client không lưu trạng thái của nhau mỗi request lên server thì client phải đóng gói thông tin đầy đủ để thằng server hiểu được. Điều này giúp hệ thống của bạn dễ phát triển, bảo trì, mở rộng vì không cần tốn công CRUD trạng thái của client. Hệ thống phát triển theo hướng này có ưu điểm nhưng cũng có khuyết điểm là gia tăng lượng thông tin cần truyền tải giữa client và server. • Khả năng caching: Các response có thể lấy ra từ cache. Bằng cách cache các response, server giảm tải việc xử lý request, còn client cũng nhận được thông tin nhanh hơn. Ở đây ta đặt 1 thằng cache vào giữa: client- cache- server. • Chuẩn hóa các interface: Đây là một trong những đặc tính quan trọng của hệ thống REST. Bằng cách tạo ra các quy ước chuẩn để giao tiếp giữa các thành phần trong hệ
  • 12. thống, bạn đã đơn giản hóa việc client có thể tương tác với server. Các quy ước này áp dụng cho toàn bộ các service giúp cho người sử dụng hệ thống của bạn dễ dụng hơn. Dễ hiểu hơn trên hệ thống bạn đặt ra 1 chuẩn API để người dùng dù là mobile, web đều có thể kết nối vào được. Hệ thống REST có yếu điểm ở đây vì khi chuẩn hóa rồi ta không thế tối ưu từng kết nối. • Phân lớp hệ thống: trong hệ thống REST bạn chia tách các thành phần hệ thống theo từng lớp, mỗi lớp chỉ sử dụng lớp ở dưới nó và giao tiếp với lớp ở ngay trên nó mà thôi. Điều này giúp bạn giảm độ phức tạp của hệ thống, giúp các thành phần tách biệt nhau từ đó dễ dàng mở rộng từng thành phần. Resources (Tài nguyên) Hệ thống REST trước hệt phải tuân thủ các ràng buộc ở trên. Đi vào chi tiết, hệ thống REST tập trung vào việc xử lý các tài nguyên. Resource là bất cứ cái gì mà bạn có thể gọi tên được (một video, ảnh, trang web, báo cáo thời tiết .v.v). Các tài nguyên này giúp ta định nghĩa được các services trong hệ thống, kiểu thông tin mà nó trả về, và hành vi xử lý thông tin của nó. Các đặc tính mô tả một tài nguyên: • Nhiều cách thức hiển thị: dữ liệu bạn nhận được có thể ở nhiều dạng ( binary, JSON, XML .v.v) dữ liệu này đại diện cho 1 tài nguyên xác định. • Nhận diện rõ ràng: Mỗi URL tại một thời điểm chỉ trả về 1 tài nguyên xác định. • Dữ liệu mô tả (metadata): Kiểu nội dung (Content-type), lần cập nhâp mới .v.v • Dữ liệu điều khiển: Is-modifiable-since, cache-control. 3. Tìm hiểu về Mongodb 3.1. Mongodb là gì? NoSQL là Non-Relational: tạm dịch là không có quan hệ. NoSQL là cơ sở dữ
  • 13. liệu không quan hệ, ràng buộc giữa các Collection (hay còn gọi là bảng trong cơ sở dữ liệu bình thường). Tức là giữa các Collection (Bảng) sẽ không có khóa chính, khóa ngoại như trong cơ sở dữ liệu bình thường. Việc này sẽ giảm bớt rối khi cơ sở dữ liệu chúng ta có nhiều bảng. NoSQL đặc biệt nhấn mạnh đến mô hình lưu trữ cặp giá trị - khóa và hệ thống lưu trữ phân tán. 3.2. Ưu điểm của mongodb MongoDB là một cơ sở dữ liệu dựa trên Document, trong đó một Collection giữ các Document khác nhau. Số trường, nội dung và kích cỡ của Document này có thể khác với Document khác. Cấu trúc của một đối tượng là rõ ràng. Khả năng truy vấn sâu hơn. MongoDB hỗ trợ các truy vấn động trên các Document bởi sử dụng một ngôn ngữ truy vấn dựa trên Document mà mạnh mẽ như SQL. MongoDB dễ dàng để mở rộng. Việc chuyển đổi/ánh xạ của các đối tượng ứng dụng đến các đối tượng cơ sở dữ liệu là không cần thiết.
  • 14. Sử dụng bộ nhớ nội tại để lưu giữ phần công việc, giúp truy cập dữ liệu nhanh hơn. 4. Tìm hiểu về hệ điều hành Android 4.1. Android là gì? Android là hệ điều hành điện thoại di động mở nguồn mở miễn phí do Google phát triển dựa trên nền tảng của Linux. Bất kỳ một hãng sản xuất phần cứng nào cũng đều có thể tự do sử dụng hệ điều hành Android cho thiết bị của mình, miễn là các thiết bị ấy đáp ứng được các tiêu chuẩn cơ bản do Google đặt ra (có cảm ứng chạm, GPS, 3G,...) Các nhà sản xuất có thể tự do thay đổi phiên bản Android trên máy của mình một cách tự do mà không cần phải xin phép hay trả bất kì khoản phí nào nhưng phải đảm bảo tính tương thích ngược (backward compatibility) của phiên bản chế riêng đó. Android là nền tảng cho thiết bị di động bao gồm một hệ điều hành, midware và một số ứng dụng chủ đạo. Bộ công cụ Android SDK cung cấp các công cụ và bộ thư viên các hàm API cần thiết để phát triển ứng dụng cho nền tảng Android sử dụng ngôn ngữ lập trình java. Những tính năng mà nền tảng Android hổ trợ: • Application framework: Cho phép tái sử dụng và thay thế các thành phần sẳn có của Android. • Dalvik virtual macine: Máy ảo java được tối ưu hóa cho thiết bị di động. • Intergrated browser: Trình duyệt web tích hợp được xây dựng dựa trên WebKIT engine. • Optimized graphics: Hổ trợ bộ thư viện 2D và 3D dự vào đặc tả OpenGL ES 1.0. • SQLite: DBMS dùng để lưu trữ dữ liệu có cấu trúc. Hổ trở các định dạng media phổ biến như: MPEG4, H.264, MP3, AAC, ARM, JPG, PNG, GIF. • Hổ trợ thoại trên nền tảng GSM (Phụ thuộc vài phần cứng thiết bị).
  • 15. • Bluetooth, EDGE, 3G và WiFi (Phụ thuộc vài phần cứng thiết bị). • Camera, GPS, la bàn và cảm biến (Phụ thuộc vài phần cứng thiết bị). • Bộ công cụ phát triển ứng dụng mạnh mẽ. Ở các chương sau chúng ta sẽ đề cập sâu hơn về các vấn đề của ANDROID ví dụ như: Lịch sử hình thành, cấu trúc …. 4.2. Lịch sử phát triển Android Ban đầu, Android là hệ điều hành cho các thiết bị cầm tay dựa trên lõi Linux do công ty Android Inc. (California, Mỹ) thiết kế. Công ty này sau đó được Google mua lại vào năm 2005 và bắt đầu xây dựng Android Platform. Các thành viên chủ chốt tại ở Android Inc. gồm có: Andy Rubin, Rich Miner, Nick Sears, and Chris White. Và sau tiếp, vào cuối năm 2007, thuộc về Liên minh Thiết bị Cầm tay Mã Nguồn mở (Open Handset Alliance) gồm các thành viên nổi bật trong ngành viễn thông và thiết bị cầm tay như: Texas Instruments, Broadcom Corporation, Google, HTC, Intel, LG, MarvellTechnology Group, Motorola, Nvidia, Qualcomm, Samsung Electronics, SprintNextel, T-Mobile, ARM Holdings, Atheros Communications, Asustek Computer Inc, Garmin Ltd, Softbank, Sony Ericsson, Toshiba Corp, and Vodafone Group,… Mục tiêu của Liên minh này là nhanh chóng đổi mới để đáp ứng tốt hơn cho nhu cầu người tiêu dùng và kết quả đầu tiên của nó chính là nền tảng Android. Android được thiết kế để phục vụ nhu cầu của các nhà sản xuất thiết, các nhà khai thác và các lập trình viên thiết bị cầm tay. Phiên bản SDK lần đầu tiên phát hành vào tháng 11 năm 2007, hãng T-Mobile cũng công bố chiếc điện thoại Android đầu tiên đó là chiếc T-Mobile G1, chiếc smartphone đầu tiên dựa trên nền tảng Android. Một vài ngày sau đó, Google lại tiếp tục công bố sự ra mắt phiên bản Android SDK release Candidate 1.0. Trong tháng 10 năm 2008, Google được cấp giấy phép mã nguồn mở cho Android Platform. Khi Android được phát hành thì một trong số các mục tiêu trong kiến trúc của nó là cho phép các ứng dụng có thể tương tác
  • 16. được với nhau và có thể sử dụng lại các thành phần từ những ứng dụng khác. Việc tái sử dụng không chỉ được áp dụng cho cho các dịch vụ mà nó còn được áp dụng cho cả các thành phần dữ liệu và giao diện người dùng. Vào cuối năm 2008, Google cho phát hành một thiết bị cầm tay được gọi là Android Dev Phone 1 có thể chạy được các ứng dụng Android mà không bị ràng buộc vào các nhà cung cấp mạng điện thoại di động. Mục tiêu của thiết bị này là cho phép các nhà phát triển thực hiện các cuộc thí nghiệm trên một thiết bị thực có thể chạy hệ điều hành Android mà không phải ký một bản hợp đồng nào. Vào khoảng cùng thời gian đó thì Google cũng cho phát hành một phiên vản vá lỗi 1.1 của hệ điều hành này. Ở cả hai phiên bản 1.0 và 1.1 Android chưa hỗ trợ soft-keyboard mà đòi hỏi các thiết bị phải sử dụng bàn phím vật lý. Android cố định vấn đề này bằng cách phát hành SDK 1.5 vào tháng Tư năm 2009, cùng với một số tính năng khác. Chẳng hạn như nâng cao khả năng ghi âm truyền thông, vật dụng, và các live folder. 4.3. Tìm hiểu về máy ảo trong android 4.3.1. Máy ảo Dalvik Dalvik là máy ảo giúp các ứng dụng java chạy được trên các thiết bị động Android. Nó chạy các ứng dụng đã được chuyển đổi thành một file thực thi Dalvik (dex). Định dạng phù hợp cho các hệ thống mà thường bị hạn chế về bộ nhớ và tốc độ xử lý. Dalvik đã được thiết kế và viết bởi Dan Bornstein, người đã đặt tên cho nó sau khi đến thăm một ngôi làng đánh cá nhỏ có tên là Dalvík ở đảo Eyjafjörður, nơi mà một số tổ tiên của ông sinh sống. Từ góc nhìn của một nhà phát triển, Dalvik trông giống như máy ảo Java (Java Virtual Machine) nhưng thực tế thì hoàn toàn khác. 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 để
  • 17. 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ế ảo thực thi các ứng dụng Android. Ban đầu, Dalvik chỉ là một máy ảo khá đơn giản. Song, khi các thiết bị di động ngày càng trở nên phức tạp hơn, Google sẽ cần phải giải quyết các vấn đề hiệu năng, bởi hiệu năng máy ảo sẽ luôn kém cỏi hơn rất nhiều so với chạy trực tiếp như trên iOS hay Windows. Đồng thời, do Dalvik là phần mềm chịu trách nhiệm thực thi gần như tất cả các ứng dụng Android, Google sẽ phải tìm cách giúp máy ảo Android của mình có thể bắt kịp với các tiến bộ của ngành công nghiệp phần cứng. Dần dần, Google đã trang bị cho Dalvik một bộ biên dịch JIT (Just-in-time: biên dịch mã nguồn ngay trước khi thực thi), khả năng chạy nhiều thread (chạy song song nhiều luồng) cùng vô số thay đổi nhỏ khác. Tuy vậy, trong những năm vừa qua, tốc độ phát triển của hệ sinh thái Android đã vượt quá khả năng phát triển của Dalvik. Do đó, Google cần phải xây dựng một phần mềm runtime (phần mềm chịu trách nhiệm chạy các ứng dụng khác) hoàn toàn mới để làm cơ sở vững chắc cho tương lai. Cụ thể hơn, giải pháp phần mềm runtime mới của Google sẽ phải thích ứng với hiệu năng của cả các vi xử lý của ngày hôm nay cũng như các vi xử lý 8 nhân của những năm tới, có thể mở rộng thêm bộ nhớ và RAM của thiết bị. Từ đó, ART ra đời.
  • 18. 4.3.2. Máy ảo ART Trước hết, ART được thiết kế để tương thích hoàn toàn với mô hình biên dịch bytecode của Dalvik. Do đó, khi nhìn từ góc độ nhà phát triển ứng dụng, bạn sẽ không cần phải viết mã nguồn riêng cho Dalvik rồi viết lại cho ART. Bạn không cần phải lo lắng gì về tính tương thích giữa 2 môi trường này cả. Sự thay đổi lớn nhất về thiết kế mà ART mang tới là khả năng biên dịch code theo mô hình AOT (Ahead of Time) thay vì JIT (Just in Time) như trước đây. Điều này có ý nghĩa là gì? Bộ runtime mới của Android không còn cần phải dịch từ bytecode sang mã máy mỗi lần chạy ứng dụng. Thay vào đó, ART sẽ chỉ biên dịch bytecode sang mã máy đúng một lần duy nhất. Quá trình thực thi ứng dụng trong các lần chạy tương lai sẽ được thực hiện từ các đoạn mã máy đã được tạo ra từ trước. Sự thay đổi này sẽ giúp mang tới các ứng dụng được tối ưu hơn. Đây thực sự là một bước tiến hoàn toàn nằm ngoài khả năng của Dalvik. Trên Android L, do mã nguồn sẽ được tối ưu và biên dịch sang mã máy đúng một lần duy nhất, chu trình tối ưu này sẽ cần phải được thực hiện rất tốt. Theo Google, Android giờ đã có thể đạt đến mức tối ưu tốt hơn đối với toàn bộ code-base (tất cả mã nguồn) của 1 ứng dụng. Điều này là do trình biên dịch mới giờ đã có thể nhìn vào tổng thể toàn bộ mã nguồn, trong khi trình biên dịch JIT hiện tại chỉ có thể tối ưu mã trên phạm vi method/local (trong một hàm nhất định). Nhờ đó, các đoạn code sẽ có thể lược bỏ các đoạn mã có thể bị coi là thừa nhưng vẫn bắt buộc phải có nếu sử dụng kiến trúc cũ, ví dụ như check exception (kiểm tra và bắt trước các lỗi có thể xảy ra trong quá trình chạy). Quá trình gọi hàm hoặc gọi interface cũng sẽ nhanh hơn đáng kể. Quá trình này sẽ được thực hiện bên trong phần mềm "dex2oat" – phiên bản thay thế cho dexopt trên Dalvik. Các file odex (file dex đã được tối ưu) cũng sẽ bị thay thế bằng file ELF. Do ART biên dịch các file thực thi ELF, nhân của Android giờ có thể quản lý các trang của code page (tập mã hóa ký tự của 1 ngôn ngữ) một cách hiệu quả hơn. Nhờ đó mà hệ điều hành di động của Google có thể quản lý bộ nhớ tốt hơn và tốn ít RAM hơn.
  • 19. Ảnh hưởng của ART tới thời lượng pin có lẽ cũng là rất đáng kể, do hệ điều hành không cần phải biên dịch mã nguồn trong quá trình chạy ứng dụng nữa. Nhờ đó, quá trình chạy ứng dụng sẽ giảm được đáng kể sức ép lên CPU, giúp tiết kiệm pin tốt hơn. Điểm yếu lớn nhất của ART so với ELF là quá trình biên dịch mã sẽ tốn nhiều thời gian hơn. Do đó, quá trình khởi động điện thoại cũng như lần bật ứng dụng đầu tiên sẽ tốn nhiều thời gian hơn so với ứng dụng tương đương trên Dalvik. Tuy vậy, theo tuyên bố của Google, phiên bản hoàn thiện sẽ có thời gian khởi động tương đương hoặc nhanh hơn Dalvik. Kể cả nếu gã khổng lồ tìm kiếm không thể thực hiện lời hứa này, người dùng thông thường cũng sẽ chỉ phải tốn thêm thời gian chờ đợi trong lần đầu cài đặt. Trải nghiệm sử dụng sau đó sẽ trở nên mượt mà hơn rất nhiều. 4.4. Kiến trúc của android Hệ điều hành Android là 1 ngăn xếp các thành phần phần mềm, được chia thành 5 phần và 4 lớp chính như trong hình bên dưới.
  • 20. 4.4.1. Linux Kernel Dưới cùng là lớp Linux - Linux 3.6 cùng với khoảng 115 bản vá. Lớp này cung cấp 1 cấp độ trừu tượng giữa phần cứng của thiết bị và các thành trình điều khiển phần cứng thiết yếu như máy ảnh, bàn phím, màn hình hiển thị... Đồng thời, hạt nhân (kernel) còn xử lý tất cả các thứ mà Linux có thể làm tốt như mạng kết nối và 1 chuỗi các trình điều khiển thiết bị, giúp cho giao tiếp với các thiết bị ngoại vi dễ dàng hơn. 4.4.2. Các thư viện Ở trên lớp nhân Linux là tập các thư viện bao gồm WebKit - trình duyệt Web mã nguồn mở, được biết đến như thư viện libc, cơ sở dữ liệu SQLite - hữu dụng cho việc lưu trữ và chia sẻ dữ liệu ứng dụng, các thư viênj chơi và ghi âm audio, video, hay các thư viện SSL chiụ trách nhiệm bảo mật Internet... 4.4.3. Các thư viện Android Đây là các thư viện dựa trên Java phục vụ cho việc phát triển Android. Ví dụ của các thư viện này bao gồm các thư viện ứng dụng dùng để xây dựng giao diện người dùng, vẽ đồ họa hay truy cập cơ sở dữ liệu. 1 số thư viện chính của Android: android.app - Cung cấp quyền truy cập vào ứng dụng và là nền tảng của tất cả ứng dụng Android. android.content - Cung cấp quyền truy cập nội dung (content), truyền tải thông điệp giữa các ứng dụng hay các thành phần của ứng dụng. android.database - Đựoc sử dụng để truy cập dữ liệu của content provider và cơ sở dữ liệu SQLite android.opengl - giao diện các phuơng thức Java để sử dụng OpenGL ES android.os - Cung cấp các ứng dụng với quyền truy cập vào các dịch vụ của hệ điều hành bao gồm thông điệp, các dịch vụ hệ thống và các giao tiếp nội tại
  • 21. android.text - Đựoc sử dụng để hiển thị và điều chỉnh chữ trên màn hình thiết bị android.view - Các thành phần cơ bản trong việc xây dựng giao diện người dùng của ứng dụng. android.widget - Tập các thành phần giao diện người dùng đã được xây dựng sẵn như các nút, các nhãn (label), list view,.... android.webkit - Tập các lớp cho phép xây dựng khả năng duyệt web. 4.4.4. Android Runtime Đây là phần thứ 3 của kiến trúc và nằm ở lớp thứ 2 từ dưới lên. Phần này cung cấp 1 bộ phận quan trọng là Dalvik Virtual Machine - là 1 loại Java Virtual Machine được thiết kế đặc biệt để tối ưu cho Android. Dalvik VM sử dụng các đặc trưng của nhân Linux như quản lý bộ nhớ và đa luồng, những thứ mà đã có sẵn trong Java. Dalvik VM giúp mọ ứng dụng Android chạy trong tiến trình riêng của nó, với các thể hiện (instance) riêng của Dalvik virtual Machine. Android Runtime cũng cung cấp 1 tập các thư viện chính giúp các nhà phát triển ứng dụng Android có thể viết ứng dụng Android bằng Java 4.4.5. Application Framework Lớp Android Framework cung cấp các dịch vụ cấp độ cao hơn cho các ứng dụng dưới dạng các lớp Java. Các nhà phát triển ứng dụng được phép sử dụng các dịch vụ này trong ứng dụng của họ. Android Framework bao gồm các dịch vụ chính sau:
  • 22. • Activitty Manager - Kiểm soát tất cả khía cạnh của vòng đời ứng dụng và ngăn xếp các Activity. • Content Providers - Cho phép các ứng dụng chia sẽ dữ liệu với các ứng dụng khác. • Resource Manager - Cung cấp quyền truy cập vào các tài nguyên như các chuỗi, màu sắc, các layout giao diện người dùng... • Notifications Manager - Cho phép các ứng dụng hiển thị cảnh báo và các thông báo cho người dùng. • View System - Tập các thành phần giao diện (view) được sử dụng để tạo giao diện người dùng. 4.4.6. Application Lớp trên cùng của kiến trúc là Application. Các ứng dụng bạn tạo ra sẽ được cài đặt trên lớp này. Ví dụ như: Danh bạ, nhắn tin, trò chơi... 4.6. Chu Kỳ Ứng Dụng Android Một tiến trình Linux gói gọn một ứng dụng Android đã được tạo ra cho ứng dụng khi codes cần được run và sẽ còn chạy cho đến khi: • Nó không phụ thuộc. • Hệ thống cần lấy lại bộ nhớ mà nó chiếm giữ cho các ứng dụng khác. Một sự khác thường và đặ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 một kết hợp của: • Những phần của ứng dụng mà hệ thống biết đang chạy • Những phần quan trọng như thế nào đối với người dung Bao nhiêu vùng nhớ chiếm lĩnh trong hệ thống.
  • 23. 4.7. Chu kỳ thành phần sống trong Android Các thành phần ứng dụng có một chu kỳ sống, tức là mỗi thành phần từ lúc bắt đầu khởi tạo và đến thời điểm kết thúc. Giữa đó, đôi lúc chúng có thể là active hoặc inactive, hoặc là trong trường hợp activies nó có thể visible hoặc invisible. 4.9. Các trạng thái của chu kỳ sống Một Activity chủ yếu có 3 chu kỳ chính sau: • Active hoặc running: Khi Activity là được chạy trên màn hình. Activity này tập trung vào những thao tác của người dùng trên ứng dụng. • Paused: Activity là được tạm dừng (paused) khi mất focus nhưng người dung vẫn trông thấy. Có nghĩa là một Activity mới ở trên nó nhưng không bao phủ đầy màn hình. Một Activity tạm dừng là còn sống nhưng có thể bị kết thúc bởi hệ thống trong trường hợp thiếu vùng nhớ. • Stopped: Nếu nó hoàn toàn bao phủ bởi Activity khác. Nó vẫn còn trạng thái và thông tin thành viên trong nó. Người dùng không thấy nó và thường bị loại bỏ trong trường hợp hệ thống cần vùng nhớ cho tác vụ khác. 4.10. Các phương thức của chu kỳ sống  Phương thức: onCreate()  Được gọi khi activity lần đầu tiên được tạo  Ở đây bạn làm tất cả các cài đặt tĩnh -- tạo các view, kết nối dữ liệu đến list và .v.v  Phương thức này gửi qua một đối tượngBundle chứa đựng từ trạng thái trược của Activity  Luôn theo sau bởi onStart()
  • 24.  Phương thức: onRestart()  Được gọi sau khi activity đã được dừng, chỉ một khoảng đang khởi động lần nữa (stared again)  Luôn theo sau bởi onStart()  Phương thức: onStart()  Được gọi trước khi một activity visible với người dùng.  Theo sau bởi onResume() nếu activity đến trạng thái foreground hoặc onStop() nế nó trở nên ẩn.  Phương thức: onResume()  Được gọi trước khi activity bắt đầu tương tác với người dùng  Tại thời điểm này activity ở trên dỉnh của stack activity.  Luôn theo sau bởi onPause()  Phương thức: onPause()  Được gọi khi hệ thống đang resuming activity khác.  Phương thức này là điển hình việc giữ lại không đổi dữ liệu.  Nó nên được diễn ra một cách nhanh chóng bởi vì activity kế tiếp sẽ không được resumed ngay cho đến khi nó trở lại.  Theo sau bởi onResume nếu activity trở về từ ở trước, hoặc bởi onStop nếu nó trở nên visible với người dùng.  Trạng thái của activity có thể bị giết bởi hệ thống.  Phương thức: onStop()
  • 25.  Được gọi khi activity không thuộc tầm nhìn của người dùng.  Nó có thể diễn ra bởi vì nó đang bị hủy, hoặc bởi vì activity khác vữa được resumed và bao phủ nó.  Được theo sau bởi onRestart() nếu activity đang đở lại để tương tác với người dùng, hoặc onDestroy() nếu activity đang bỏ.  Trạng thái của activity có thể bị giết bởi hệ thống.  Phương thức: onDestroy()  Được gọi trước khi activity bị hủy.  Đó là lần gọi cuối cùng mà activity này được nhận.  Nó được gọi khác bởi vì activity đang hoàn thành, hoặc bởi vì hệ thống tạm thởi bị hủy diệt để tiết kiệm vùng nhớ.  Bạn có thể phân biệt giữa 2 kịch bản với phương isFinshing(). Trạng thái của activity có thể được giết bởi hệ thống. 5. Tìm hiểu về GPS 5.1. GPS là gì? m 27 vệ tinh quay xung quanh trái đất. Trong số 27 vệ tinh này, 24 vệ tinh đang hoạt động, 3 vệ tinh còn lại đóng vai trò dự phòng trong trường hợp 1 trong số 24 vệ tinh chính bị hư hỏng. Dựa vào cách sắp đặt của các vệ tinh này, khi đứng dưới mặt đất, bạn có thể nhìn được ít nhất là 4 vệ tinh trên bầu trời tại bất kì thời điểm nào. 5.2. Phân loại Hệ thống định vị toàn cầu của Mỹ là hệ dẫn đường dựa trên một mạng lưới 24 quả vệ tinh được Bộ Quốc phòng Hoa Kỳ đặt trên quỹ đạo không gian.
  • 26. Các hệ thống dẫn đường truyền thống hoạt động dựa trên các trạm phát tín hiệu vô tuyến điện. Được biết đến nhiều nhất là các hệ thống sau: LORAN – (LOng RAnge Navigation) – hoạt động ở giải tần 90-100 kHz chủ yếu dùng cho hàng hải, hay TACAN – (TACtical Air Navigation) – dùng cho quân đội Mỹ và biến thể với độ chính xác thấp VOR/DME – VHF (Omnidirectional Range/Distance Measuring Equipment) – dùng cho hàng không dân dụng. Gần như đồng thời với lúc Mỹ phát triển GPS, Liên Xô cũng phát triển một hệ thống tương tự với tên gọi GLONASS. Hiện nay Liên minh châu Âu đang phát triển hệ dẫn đường vệ tinh của mình mang tên Galileo. Trung Quốc thì phát triển hệ thống định vị toàn cầu của mình mang tên Bắc Đẩu bao gồm 35 vệ tinh. Ban đầu, GPS và GLONASS đều được phát triển cho mục đích quân sự, nên mặc dù chúng dùng được cho dân sự nhưng không hệ nào đưa ra sự đảm bảo tồn tại liên tục và độ chính xác. Vì thế chúng không thỏa mãn được những yêu cầu an toàn cho dẫn đường dân sự hàng không và hàng hải, đặc biệt là tại những vùng và tại những thời điểm có hoạt động quân sự của những quốc gia sở hữu các hệ thống đó. Chỉ có hệ thống dẫn đường vệ tinh châu Âu Galileo (đang được xây dựng) ngay từ đầu đã đặt mục tiêu đáp ứng các yêu cầu nghiêm ngặt của dẫn đường và định vị dân sự. GPS ban đầu chỉ dành cho các mục đích quân sự, nhưng từ năm 1980 chính phủ Mỹ cho phép sử dụng trong dân sự. GPS hoạt động trong mọi điều kiện thời tiết, mọi nơi trên Trái Đất, 24 giờ một ngày. Không mất phí thuê bao hoặc mất tiền trả cho việc thiết lập sử dụng GPS nhưng phải tốn tiền không rẻ để mua thiết bị thu tín hiệu và phần mềm nhúng hỗ trợ.
  • 27. 5.3. Sự hoạt động của GPS Các vệ tinh GPS bay vòng quanh Trái Đất hai lần trong một ngày theo một quỹ đạo rất chính xác và phát tín hiệu có thông tin xuống Trái Đất. Các máy thu GPS nhận thông tin này và bằng phép tính lượng giác tính được chính xác vị trí của người dùng. Về bản chất máy thu GPS so sánh thời gian tín hiệu được phát đi từ vệ tinh với thời gian nhận được chúng. Sai lệch về thời gian cho biết máy thu GPS ở cách vệ tinh bao xa. Rồi với nhiều quãng cách đo được tới nhiều vệ tinh máy thu có thể tính được vị trí của người dùng và hiển thị lên bản đồ điện tử của máy. Máy thu phải nhận được tín hiệu của ít nhất ba vệ tinh để tính ra vị trí hai chiều (kinh độ và vĩ độ) và để theo dõi được chuyển động. Khi nhận được tín hiệu của ít nhất 4 vệ tinh thì máy thu có thể tính được vị trí ba chiều (kinh độ, vĩ độ và độ cao). Một khi vị trí người dùng đã tính được thì máy thu GPS có thể tính các thông tin khác, như tốc độ, hướng chuyển động, bám sát di chuyển, khoảng hành trình, quãng cách tới điểm đến, thời gian Mặt Trời mọc, lặn và nhiều thứ khác nữa.
  • 28. CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG 1. Đặc tả bài toán Hiện nay việc theo dõi vị trí, chia sẻ các địa điểm theo thời gian thực là một trong những vấn đề nóng được các nhà phát triển lớn quan tâm đến, Google là một trong những nhà phát triển lớn nhất quan tâm và đang xây dựng các hệ thống lớn liên quan đến vị trí, bản đồ, thời gian thực, họ rất thành công trong lĩnh vực này. Trên thế giới cũng như ở việt nam, điện thoại di động thông minh là một thứ không thể thiếu được trong đời sống hàng ngày của mọi người dân, khi đời sống người dân được nâng cao thì nhu cầu sử dụng điện thoại cũng tăng lên, nhu cầu theo dõi vị trí của mọi người xung quanh mình cũng được quan tâm tới nhiều hơn, mọi người cần một phần mềm có thể theo dõi vị trí trong một nhóm. • Người sử dụng cần một phần mềm có chức năng theo dõi vị trí của một nhóm người. • Người sử dụng cần một phần mềm để đi du lịch tìm được những con đường gắn nhất, đẹp nhất, nhiều quán ăn, nơi ngủ nghỉ giá rẻ nhất… • Người sử dụng cần một phần mềm tạo ra một mạng xã hội chia sẻ thông tin cho những người đi du lịch bụi, giao lưu, kết bạn, trao đổi thông tin, chia sẻ ảnh video… Với những vấn đề đặt ra ở trên thôi thúc tôi xây dựng lên một phần mềm chạy trên điện thoại thông minh giúp mọi người có thể dễ dàng theo dõi vị ví của nhau. 2. Đặc tả chức năng 2.1. Đăng ký  Mô tả chức năng Chức năng đăng ký tài khoản giúp người sử dụng có thể đăng ký một tài khoản mới.
  • 29.  Mô tả hoạt động 1. Người sử dụng bật phần mềm, chọn chức năng đăng ký 2. Phần mềm yêu cầu người sử dụng nhập vào thông tin tài khoản 3. Người dùng nhập thông tin tài khoản vào form 4. Bấm vào nút đăng ký, dữ liệu được gửi tới server 5. Server xử lý dữ liệu, sau đó server sẽ thông báo lại cho người sử dụng đăng ký thành công hay không 6. Nếu thành công thì chuyển sang màn hình đăng nhập, không thành công thông báo lỗi 2.2. Đăng nhập  Mô tả chức năng Chức năng đăng nhập để xác thực quyền truy cập của người dùng, cũng như định danh thông tin người dùng, sau khi đăng nhập người dùng mới tiếp tục sử dụng các chức năng khác của ứng dụng  Mô tả hoạt động 1. Người sử dụng vào chức năng đăng nhập 2. Phần mềm yêu cầu nhập thông tin tài khoản 3. Người dùng nhập thông tin tài khoản, sau đó bấm vào nút đăng nhập 4. Dữ liệu được gửi lên server, server kiểm tra trả về kết quả đăng nhập thành công, hoặc không thành công
  • 30. 2.3. Tạo nhóm  Mô tả chức năng Chức năng tạo nhóm giúp người dùng tạo gia một nhóm có thể theo dõi vị trí của những thành viên trong nhóm đó.  Mô tả hoạt động 1. Người sử dụng vào menu, chọn xem nhóm, chọn chức năng tạo nhóm 2. Phần mềm yêu cầu nhập thông tin tạo nhóm 3. Người dùng nhập thông tin tạo nhóm xong, bấm nút tạo nhóm 4. Dữ liệu được gửi tới server 5. Server kiểm tra dữ liệu, đưa ra thông báo tạo nhóm thành công hoặc không thành công 2.3. Xóa nhóm  Mô tả chức năng Chức năng giúp người sử dụng có thể xóa nhóm, không muốn theo dõi vị trí nữa  Mô tả hoạt động 1. Người dùng vào xem nhóm 2. Người dùng chọn nút xóa nhóm 2.4. Sử dụng nhóm  Mô tả chức năng Chức năng này cho phép người sử dụng chọn nhóm, thay đổi các nhóm cần theo dõi vị trí  Mô tả hoạt động 1. Chọn nhóm cần sử dụng để theo dõi vị trí, chỉ được theo dõi vị trí của một nhóm trong cùng một thời điểm.
  • 31. 2. Hệ thống thông báo chọn nhóm thành công. 2.5. Xem vị trí  Mô tả chức năng Giúp người sử dụng có thể xem vi trí của mọi người trong một nhóm  Mô tả hoạt động 1. Người dùng bật GPS, chọn cho phép lấy và gửi dữ liệu đi 2. Ứng dụng sẽ liên tục gửi dữ liệu lên server, đồng thời lấy dữ liệu về và vẽ liên tục vị trí của mọi người trên bản đồ. 3. Các biểu đồ hệ thống 3.1. Biểu đồ UseCase Mô hình Usecase dưsới đây thể hiện cho số lượng chức năng của hệ thống mà người dùng có thể tương tác được trực tiếp.
  • 32. 3.1.1. UseCase đăng nhập, đăng ký Giúp người sử dụng đăng nhập vào ứng dụng, sau đó sử dụng được các chức năng tiếp theo.
  • 33. 3.1.2. UseCase myGroup Giúp người sử dụng xem được tất cả các nhóm mà mình đã tham gia, và thêm được nhóm mới cũng như, xóa được nhóm mà họ đã tham gia.
  • 34. 3.1.3. UseCase xem vị trí Chức năng này giúp người sử dụng có thể gửi vị trí của mình lên server và lấy dữ liệu vị trí của mọi người trong nhóm về.
  • 35. 3.2. Biểu đồ trình tự 3.2.1. Register
  • 38.
  • 39. 3.3. Biểu đồ lớp 3.3.1. ViewPosition
  • 40. 3.4. Biểu đồ hoạt động 3.4.1. LoginActivity
  • 43.
  • 44. CHƯƠNG 3: DEMO CHƯƠNG TRÌNH 1. Một số hình ảnh của ứng dụng 1.1. Cho phép sử dụng Gps trên android Phần mềm của chúng ta cần sử dụng dữ liệu từ Gps lên cần phải bật Gps lên mới có thể sử dụng được.
  • 45. 1.2. Đăng nhập Chức năng giúp người dùng đăng nhập vào phần mềm.
  • 46. 1.3. Đăng ký Giúp người sử dụng đăng ký tài khoản mới.
  • 47. 1.4. Xem nhóm Giúp người sử dụng xem nhóm.
  • 48. 1.5. Tạo nhóm Tạo một nhóm mới cho mọi người sử dụng.
  • 49. 1.6. Xem vị trí Xem vị trí của mọi người trong một nhóm.
  • 50.
  • 51.
  • 52. 2. Đánh giá ứng dụng 2.1. Mục tiêu đạt được Các chức năng chính Hoàn thành Đăng nhập 100% Đăng ký 100% Xem nhóm 100% Tạo nhóm 100% Xem vị trí 100% 2.2. Các issue và bug chưa giải quyết • Ứng dụng không chạy được đa nền tảng(issue) Lý do: Do ứng dụng lập trình trên hệ điều hành android, lên chỉ chạy được trên các điện thoại máy tính bảng sử dụng hệ điều hành android. Hướng giải quyết: Chúng ta sẽ nâng cấp công nghệ cho ứng dụng này, như công nghệ lập trình mobile hibernate, hoặc xamarin, sau khi sử dụng công nghệ này ứng dụng sẽ dễ dàng hoạt động trên các nền tảng phổ biến như ios, android, winphone mobile, linux, … • Ứng dụng trao đổi dữ liệu với server theo thời gian cố định lên sẽ tốn nhiều dữ liệu để truyền tin(issue) Lý do: Do ứng dụng sử dụng gửi và nhận dữ liệu theo thời gian, lên các request sẽ gửi liên tục lên server và nhận dữ liệu trả về, làm tốn pin và dung lượng truyền tin. Hướng giải quyết: Khi nâng cấp phiên bản sau, chúng ta sẽ sử dụng công nghệ socket, websocket, lúc đó chúng ta sẽ quản lý các client tốt hơn, việc nhận gửi dữ liệu sẽ tiết kiệm đáng kể dữ liệu cũng như lượng pin của thiết bị.
  • 53. 2.3. Hướng phát triển tương lai • Sau khi khắc phục tốt các issue trên thì tôi sẽ phát triển phần mềm thành một phần mềm giúp mọi người di du lịch có thể theo dõi vị trí của nhau. • Giúp người đi du lịch có thể lưu lại những con đường họ đã đi qua và chia sẻ lên mạng xã hội facebook, twitter, google+, … • Có chức năng chia sẻ ảnh khi đang đi trên đường, cho mọi người đi du lịch qua quãng đường đó có thể xem được. • Phát triển phần mềm đa nền tảng cho mọi người đều có thể sử dụng được. 3. Kết luận Sau khi thực hiện xong project này em đã nắm bắt được qui trình làm một dự án phần mềm trên mobile nói chung đồng thời hiểu thêm được nhiều kiến thức về Android và các công nghệ liên quan như là Mongodb, Spring boot, Json, Webservice, …
  • 54. Tài liệu tham khảo 1. Website: https://spring.io/ 2. Website: http://stackoverflow.com/ 3. Website: http://o7planning.org/ 4. Website: https://github.com/ 5. Website: http://www.uml-diagrams.org/ 6. Kênh Youtube: https://www.youtube.com/user/koushks 7. Website: https://www.ibm.com 8. Website: https://techmaster.vn