Become an Android developer
Bài đăng này đã không được cập nhật trong 3 năm
Mở đầu
Ăn theo bài viết Từ PHP nhảy sang code Ruby thì có gì vui?!, trong bài viết này mình sẽ kể về những thứ mình đã học "từ từ" để chuyển từ một React developer sang Android developer (không phải react-native nhé).
Vì nếu nói về Android
thì không biết bao giờ mới xong nên mình chỉ viết một cách giản lược cách mà mình tiếp cận với Android
cũng như những gì mình đã tìm hiểu cũng như học được.
Note: bài viết mang nhiều tính chất cá nhân, mọi người góp ý ở comment nhé 😂
Android? What is it?
Dĩ nhiên rồi, cũng như việc chúng ta tìm hiểu 1 cô gái hay 1 chàng trai, việc đầu tiên chúng ta phải có một cái nhìn tổng quát về người ta (dùng mắt đó), sau đó mới là thông tin chi tiết về người đó như ngày sinh, số điện thoại,... rồi chi tiết hơn nữa
Đối với Android cũng vậy, về định nghĩa: "Android là một hệ điều hành dựa trên nền tảng Linux được thiết kế dành cho các thiết bị di động có màn hình cảm ứng như điện thoại thông minh và máy tính bảng.". Ngoài ra, Google đã phát triển thêm Android TV
cho TV, Android Auto
cho ô tô và Wear OS
cho đồng hồ đeo tay, mỗi chiếc đều có giao diện người dùng chuyên biệt. Các biến thể của Android cũng được sử dụng trên bảng điều khiển trò chơi, máy ảnh kỹ thuật số, máy tính cá nhân và các thiết bị điện tử khác.
What do I need to know?
Tiếp nối phần trên, sau khi chúng ta có thông tin cơ bản về đối tượng rồi, chúng ta bắt đầu xem chúng ta có thể bắt đầu cưa cẩm người ta hay chưa. Ví dụ sau khi hỏi thăm được bạn biết cô nàng đó mộng mơ và thích văn thơ thì bạn cần phải tích lũy một số câu chuyện cười (triết lý), hay văn thơ gì đó để còn chém gió
Cũng khá may, cô nàng Android
này không có quá nhiều yêu cầu, dưới đây là những gì mình cảm nhận được nhữ thứ cơ bản nhất bạn cần phải có để bắt đầu vơi Android
:
- Kỹ năng lập trình cơ bản
- Lập trình hướng đối tượng (không tính react-native hay vue-native nhé)
- Biết dùng google (stackoverflow hay viblo)
Kỹ năng lập trình cơ bản
Cái này không phải nói rồi, để lập trình được thì chúng ta phải biết được kỹ năng lập trình cơ bản rồi =)) Nếu bạn là beginner thì hơi khó rồi (dĩ nhiên là vẫn được), bạn sẽ phải mất nhiều thời gian hơn để làm quen với lập trình cơ bản (như khai và sử dụng biến, các câu lệnh điều khiển, các thuật toán cơ bản,...)
Trong đây mình không nói đến lập trình java
cơ bản mà chỉ là lập trình cơ bản
, vì các ngôn ngữ lập trình đều có sự tương quan với nhau, nên khi chuyển từ một ngôn ngữ này sang ngôn ngữ khác bạn chỉ cần phải làm quen với cú pháp
vã những gì đặc trưng của nó chứ không phải học lại những thứ cơ bản mà bạn đã biết.
Về cơ bản, nếu bạn đã là một lập trình viên thì cái này có thể bỏ qua.
Lập trình hướng đối tượng
Đây chính là một trong những đặc trưng cơ bản nhất của java
hay kotlin
(2 ngôn ngữ thường được dùng trong lập trình android). Bạn sẽ mất rất nhiều thời gian khi vừa làm vừa google
tìm hiểu xem extend
, implement
hay interface
,... là cái quần què gì. Vậy nên trước hết, bạn hãy ôn lại những kiến thức cơ bản về lập trình hướng đối tượng
đi đã.
Sử dụng công cụ tìm kiếm
Các bạn có thể cười khi đọc tới đoạn này nhưng nó là sự thật. Việc sử dụng công cụ tìm kiếm một cách hợp lý và đúng đắn sẽ giúp các bạn tiết kiệm được kha khá thời gian của mình đó.
- google: tìm kiếm mọi thứ mà chúng ta muốn
- stackoverflow: chính là một trong những điểm đến quen thuộc cho chúng ta khi gặp
bug
haylỗi
gì đó không thể hiểu được =)) - viblo: hơi giống quảng cáo chút nhưng trên
viblo
chúng ta có thể tìm được rất nhiềututorial
bằng tiếngViệt
mà các nơi khác không có, khá tiện lợi cho những bạn lười đọc tiếng Anh
Mở rộng
Ở trên là những gì cơ bản nhất bạn cần phải có khi bắt đầu lập trình cho Android
, ngoài ra nếu các bạn có thêm các kiến thức khác thì tốt hơn rồi, ví dụ như:
- Một số Design patent
- Mô hình MVP (Model - View - Presenter)
- Nguyên tắc DRY (Don't Repeat Yourself), KISS (Keep It Simple, Stupid)
- .....
Java and Kotlin
Sau khi tích lũy được một số chiêu trò để có thể chém gió với nàng, tiếp theo bạn phải xác định xem nên tiếp cận nàng (làm quen) nàng như nào, nên làm nhanh hay chậm,... Đây chính là một câu hỏi hóc búa
Đối với Android
cũng vậy, có khá là nhiều lựa chọn khi bạn muốn bắt đầu, ở đây mình chọn sử dụng Java/Kotlin
. Tại sao lại có cả Java
lẫn Kotlin
?
Đầu tiên, chúng nhắc lại một chút về định nghĩa của 2 ngôn ngữ này:
- Java: là một ngôn ngữ lập trình hướng đối tượng (
OOP
). Khác với phần lớn ngôn ngữ lập trình thông thường, thay vì biên dịchmã nguồn
thànhmã máy
hoặc thông dịch mã nguồn khi chạy, Java được thiết kế để biên dịch mã nguồn thànhbytecode
,bytecode
sau đó sẽ được môi trường thực thi (runtime environment) chạy. - Kotlin: Một ngôn ngữ ra đời với việc thừa kế những sự tốt đẹp của Java và giải quyết những vấn đề mà Java gặp phải.
Một trong những đặc điểm mình thích nhất trong kotlin
là sự tương thích của nó với java
là 100%
.
Ặc, tương thích 100%
nghĩa là sao?
Nghĩa là bạn hoàn toàn có thể chuyển đổi đoạn code
hay một class
viết bằng java
thành kotlin
và ngược lại. Ngoài ra, bạn cũng có thể sự dụng đồng thời java
vàkotlin
trong một project mà không phải lo xảy ra vấn đề. Còn nữa, tuy kotlin
còn mới, nhưng do nó có thể chạy cùng java
nên các bạn hoàn toàn có thể sử dụng các thư viện cho java
trong các project kotlin
. Quá là tiện luôn
Android basic
Sau khi xác định cách tiếp cận nàng, chúng ta hãy bắt đầu
nào
Dưới đây là những gì mình cho là cơ bản
các bạn nên nắm được trước cũng như trong khi lập trình cho Android
. Mình không đặt nó chung với What do I need to know? vì đây là những thứ mà bạn có thể vừa làm vừa học được, còn ở phần What do I need to know?, đó là những điều bạn cần phải biết trước khi chúng ta bắt đầu.
Android Studio and Debugging
Đây là công cụ gần như không thể thiếu đối với các lập trình viên Android. Nó được phát triển bởi jetbrains, đây là một công cụ rất mạnh và hỗ trợ rất các bạn rất nhiều trong quá trình sử dụng. Nó có bộ phím tắt thần thánh và bộ plugin rất là to giúp chúng ta tăng tốc độ code lên rất nhiều.
Để tối ưu Android studio
bạn có thể tham khảo một số bài viết như:
- Android Studio Tips
- Các phím tắt cơ bản trong lập trình android
- Plugin Android Studio hỗ trợ giảm thời gian coding
Activity and their lifecycle
Khi người dùng tương tác với một ứng dụng trên thiết bị Android, họ hầu như luôn luôn tương tác với một Activity, một màn hình đơn nhất trên thiết bị. Thông thường trong một ứng dụng (Application) sẽ có một hoặc nhiều Activity
- Mỗi một Activity này sẽ có một vòng đời riêng độc lập hoàn toàn với các Activity khác. Việc hiểu rõ vòng đời của Activity là rất quan trọng trong việc xử lý thông tin.
- Mỗi một Activity muốn được triệu gọi trong ứng dụng thì bắt buộc nó phải được khai báo trong Manifest
Tham khảo thêm tại: Activity và Fragment trong Android
Dưới đây là hình ảnh mô tả về vòng đời của 1 Activity
Các trạng thái của Activity:
- Active (hoạt động): Đứng đầu trong thứ tự
Activity
, người dùng có thể nhìn thấy, được tập trung vào, và làActivity
mặt nổi (foreground) có thể nhận tương tác (input) từ người dùng. Android runtime sẽ ngừng các activity có ưu tiên thấp hơn để giúp activity active được hoạt động. Khi có một activity khác chuyển trạng thái thành active, activity này sẽ chuyển sang trạng thái paused. - Paused (tạmg ngừng): Trong 1 số trường hợp, loại activity này có thể nhìn thấy được nhưng sẽ không được tập trung vào.
Activity
có trạng thái này khi có mộtActivity
khác ở dạng trong suốt hay không hiện đầy đủ màn hình được active trên nó. Khi chuyển sang trạng thái paused, activity sẽ được coi như là đang active nhưng không nhận được tương tác (input) từ người dùng. Ở một số trường hợp hy hữu, activity ở trạng thái paused sẽ bị ngưng để lấy thêm nguồn chạy ứng dụng. Khi activity trạng thái paused hoàn toàn bị che khuất, nó sẽ chuyển sang dạng stopped. - Stopped (dừng lại): Nếu activity không thể nhìn thấy, nó sẽ chuyển sang dạng stopped.
Activity
dạng này vẫn được giữ trong memory và ghi nhớ tất cả thông tin trạng thái nhưng sẽ là một ứng viên có thể xoá khi hệ thống cần nhiều bộ nhớ. Khi ở trạng thái stopped, cần thiết phải lưu giữ lại dữ liệu và trạng thái UI hiện tại và dừng tất cả các vận hành không quan trọng. Khi một activity thoát hoặc đóng, nó sẽ chuyển dạng thành inactive. - Inactive (không hoạt động):
Activity
kiểu này nằm giữa khoảng cách của bị xoá và được mở lên. Nó bị xoá khỏi thứ tự Activity và cần được khởi động lại trước khi có thể hiện lên và sử dụng.
Tham khảo thêm tại:
Fragments and their lifecycle
Fragment là một phần giao diện người dùng hoặc hành vi của một ứng dụng. Fragment có thể được đặt trong Activity, nó có thể cho phép thiết kế activity với nhiều module. Chúng ta có thể coi Fragment
là một sub-activity
.
Một số đặc điểm của fragment
:
- Fragment cũng có layout của riêng của nó, cũng có các hành vi và vòng đời riêng.
- Chúng ta có thể thêm hoặc xóa Fragment trong một Activity trong khi Activity này đang chạy.
- Có thể kết hợp nhiều Fragment trong một Activity để xây dựng giao diện người dùng đa khung.
- Một Fragment có thể được sử dụng trong nhiều Activitiy.
- Vòng đời của Fragment có quan hệ chặt chẽ với vòng đời của Activity đang dùng nó, nghĩa là khi Activity bị tạm dừng thì các Fragment sẽ dừng lại.
- Fragment có thể thực hiện một hành vi mà không có trong thành phần giao diện người dùng.
- Fragment được thêm vào API 11 trở lên.
Tham khảo thêm tại: Activity và Fragment trong Android
Dưới đây là vòng đời của một fragment
:
Các phương thước trong Fragment :
- onAttach(): Một instance của Fragment được gắn kết với một sự activity. Fragment và Activity không hoàn toàn được khởi tạo.
- onCreate(): Hệ thống gọi phương thức này khi tạo Fragment. Tại đây, bạn nên khởi tạo các thành phần cơ bản của Fragment mà bạn muốn duy trì khi Fragment bị dừng hoặc tạm dừng, sau đó được phục hồi lại.
- onCreateView(): Hệ thống gọi phương này khi cần Fragment đó để vẽ giao diện UI lần đầu tiên. Để vẽ một UI cho Fragment của bạn, bạn phải trả về một thành phần View từ phương thức này. Đó là root của layout. Bạn có thể trả về null nếu Fragment không cung cấp một giao diện UI.
- onActivityCreated(): Được gọi sau phương thức onCreateView() khi host activity được tạo. Tại điểm này, View có thể được truy cập với phương thức findViewById(). Ví dụ, trong phương thức này bạn có thể khởi tạo các đối tượng mà cần một đối tượng Context.
- onStart(): khi Fragment hoạt động
- onResume(): Fragment hoạt động trở lại.
- onPause(): Hệ thống gọi phương thức này khi có dấu hiệu chỉ rằng người dùng đang rời khỏi Fragment này.
- onStop(): Fragment đang bị dừng bằng cách gọi phương thức này.
- onDestroyView(): Fragment view sẽ hủy sau khi gọi phương thức này.
- onDestroy(): Được gọi để xóa trạng thái của Fragment.
Intents
Intent là hạt nhân trong Android, nó rất quan trọng. Hầu như mọi hoạt động trong Android đều có dấu ấn của Intent.
- Sử dụng Intent để chuyển qua chuyển lại giữa các Activity.
- Sử dụng Intent để chuyển qua ứng dụng khác
- Sử dụng Intent để chạy Services, Services được chạy dưới background và không có giao diện
- Sử dụng Intent để gửi Broadcast Message,
Broadcast Message
là message bất kỳ mà ứng dụng sẽ nhận được ví dụ như khởi động lại hệ thống (system booting), thiết bị bắt đầu sạc (device charging started), thiết bị nhận được tin nhắn (receive sms),...
Có 2 loại Intent
là implicit (ngầm) và explicit (rõ ràng):
- Implicit Intent chỉ định thực hiện hành động chung chung và không xác định bất kỳ một thành phần cụ thể nào. Một ví dụ điển hình như bạn muốn chia sẻ bức ảnh và hiển thị một cửa sổ để bạn có thể chọn cách chia sẻ thông qua (Email, Bluetooth, SMS, WhatsApp, Facebook .v.v.).
- Explicit Intent: intent đã được xác định thuộc tính component, nghĩa là đã chỉ rõ thành phần sẽ nhận và xử lý intent. Thông thường intent dạng này sẽ không bổ sung thêm các thuộc tính khác như action, data. Explicit Intent thương được sử dụng để khởi chạy các activity trong cùng 1 ứng dụng
Tham khảo thêm tại: Làm việc với Intent trong Phát triển ứng dụng Android
Create UI using the layout editor
Một trong những thành phần quan trọng nhất tạo nên ứng dụng của bạn đó là UI (giao diện người dùng). Android studio
hỗ trợ các bạn tận răng trong việc kéo thả tạo giao diện cũng như preview
giao diện của bạn.
Trong Layout Editor, bạn có thể nhanh chóng tạo bố cục bằng cách kéo các phần tử giao diện vào trình chỉnh sửa thiết kế trực quan thay vì viết layout XML bằng tay. Trình chỉnh sửa thiết kế có thể xem trước bố cục của bạn trên các thiết bị và phiên bản Android khác nhau và bạn có thể tự động thay đổi kích thước bố cục để đảm bảo bố cục hoạt động tốt trên các kích thước màn hình khác nhau.
- Palette: chứa danh sách các
view và
view group` mà bạn có thể kéo thả vào giao diện của mình. - Component Tree: Cấu trúc (bố cục) giao diện của bạn.
- Toolbar: Nơi bạn có thể thay đổi cấu hình (configure) giao diện cũng như thay đổi một số tham số trong giao diện.
- Design editor: Xem trước giao diện (preview), hỗ trợ 2 kiểu xem trước là
Design
(trực quan) vàBlueprint
- Attributes: Kiểm soát các thuộc tính của
view
đã chọn.
Note: Đối với các bạn đã quen với React, bạn có thể thấy các view
có sẵn (Palette) tương tự các Component trong React, nó cũng có các thuộc tính của mình mà bạn có thể truyền vào tương tự như props
vậy
Persistent data
Ngoài việc hiển thị giao diện hay thực hiện các tính năng thì việc lưu trữ dữ liệu (trên máy) cũng là một trong những điều quan trọng mà chúng ta cần phải quan tâm tới. Việc lưu trữ hay cache dữ liệu giúp chúng ta tăng tốc độ của app cũng như hiệu năng sử dụng của app.
Android hỗ trợ chúng ta 4 phương thức để lưu trữ dữ liệu:
- Internal file storage: Lưu trữ dữ liệu private, chỉ ứng dụng của bạn mới có thể truy cập vào nó
- External file storage: Lưu trữ dữ liệu trên bộ nhớ ngoài (shared external file system). Thường dùng cho những dữ liệu mà người dùng chia sẻ như ảnh chẳng hạn.
- Shared preferences: Lưu trữ dữ liệu private bằng các cặp
key - value
. - Databases: Lưu trữ dữ liệu bằng cơ sở dữ liệu (private). Mặc định, Android hỗ trợ sẵn
SQLite
, cơ sở dữ liệu mà bạn tạo chỉ có thể truy cập bằng app của bạn.
Tham khảo thêm tại: Data and file storage overview
Interacting with RESTful APIs
Trong quá trình phát triển ứng dụng android, có thể sẽ có lúc bạn cần xử lý những công việc liên quan đến Network như là gửi Request đến API, nhận Response và xử lý những dữ liệu trả về.
Những công việc này thường phức tạp và khiến code của bạn trở nên rắc rối khó đọc, vì vậy một số thư viện ra đời giúp cho cuộc sống của bạn dễ dàng hơn. Một trong những thư viện khá nổi tiếng và được nhiều người tin dùng đó là Retrofit.
Retrofit là thư viện HTTP Client
cho Android và Java. Retrofit
giúp dễ dàng kết nối tới một REST, web sercice bằng cách sử dụng java interface
. Thư viện mạnh mẽ này giúp chúng ta có thể làm việc dễ dàng với dữ 2 dạng dữ liệu phổ biến là JSON và XML, khi nhận về json hoặc XML thì sẽ phân tích và tạo thành các object của java. Nó cung cấp đầy đủ các phương thức GET, POST, PUT, PATCH và DELETE
Về cách sử dụng, các bạn có thể tham khảo ở đây nhé
- Sử dụng cùng java: [Android] Có thể bạn chưa biết - Retrofit
- Sử dụng cùng kotlin: Kotlin - API Control with Retrofit and RxJava
Lời kết
Qua bài viết này, mình muốn chia sẻ đến cách bạn những điều cơ bản nhất mà mình đã học được khi chuyển sang lập trình Android.
Vì mới tiếp xúc một thời gian ngắn chắc chắn mình chưa thể hiểu rõ Android nói chung và Java/Kotlin nói riêng, nên nếu có sai sót rất mong các bạn góp ý.
Với mình, lập trình Android (java/kotlin) cũng như lập trình web vậy. Nó cũng có giao diện (frontend), cũng có api lấy dữ liệu (server), cũng có controller (activity - tương tự controller trong laravel ấy), cũng có xứ lý các sự kiện (click) hay real-time action (chat, notification). Vì vậy, nếu bạn là một lập trình web và muốn chuyển sang hay thử sức với android. Hãy tự tin lên, nó không khó như bạn nghĩ đâu
Note: và nó cũng có những thứ khó nhằn lắm, lúc đó chúng ta cần phải có google hay chuyên gia giúp đỡ
All rights reserved