+29

Become an Android developer

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 hay lỗ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ều tutorial bằng tiếng Việ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ịch mã nguồn thành mã 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ành bytecode, 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 java100%.

Ặ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 javakotlin 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

Android studio Đâ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ư:

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

Activity and their lifecycle

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ột Activity 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:

Fragments and their lifecycle

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 Intentimplicit (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.

Android Layout editor

  1. 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.
  2. Component Tree: Cấu trúc (bố cục) giao diện của bạn.
  3. 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.
  4. Design editor: Xem trước giao diện (preview), hỗ trợ 2 kiểu xem trước là Design (trực quan) và Blueprint
  5. 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

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à JSONXML, 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, PATCHDELETE

Về cách sử dụng, các bạn có thể tham khảo ở đây nhé

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

Viblo
Let's register a Viblo Account to get more interesting posts.