Bài 2: Làm việc với Framework của Android

Mục tiêu bài học

  • Hiểu cấu trúc ứng dụng dự án Android
  • Sử dụng các tài liệu hỗ trợ trong quá trình phát triển ứng dụng Android
  • Hiểu vòng đời của ứng dụng
  • Thiết kế ứng dụng đáp ứng yêu cầu và mong đợi của người dùng

1. Cấu trúc project Android

androidprojectstructure

2. Activity

  • Đại diện cho 1 màn hình người dùng sẽ tương tác với
  • Thường một ứng dụng có nhiều activities
  • Có 1 main activity sẽ được khởi chạy lần đầu
  • Mỗi Activity thông thường có 2 file gắn với nó: Java class kế thừa từ Activity class dùng để khởi tạo và xử lý các sự kiện tương tác. Và 1 file XML mô tả layout của nó.

3. Layout

  • Layout: cách UI được khởi tạo, các thành phần được hiển thị trên màn hình, kích thước, vị trí, màu sắc, viền, font chữ và các thuộc tính khác…
  • Có 2 cách để định nghĩa layout của Activity: qua code hoặc qua XML sau inflate trên code
  • Cách tạo layout trên XML cho phép bạn tách việc dựng layout khỏi hành vi, thay đổi layout động theo cấu hình thiết bị, dễ bảo trì, chuyên môn hoá…

4. View Group

androidviewgroup

5. View Objects

androidviewobjects

6. View Object Attributes

androidviewobjectattributes

7. Layout Measurements

androidlayoutmeasurement

8. Intent và Bundle

  • Bundle: là container sử dụng để truyền dữ liệu giữa các activities
  • Khi activity được khởi tạo hay huỷ, nó được đính với bundle lưu trữ và truy xuất trạng thái được cất giữ (frozen/saved state) và nội dung hiện tại của các components của actvity đó.
  • Intent: là đối tượng gửi thông điệp để ra lệnh chạy activity
  • Một cách dùng khác của bundle là lưu trữ thông tin trạng thái của activity khi nó bị suspend (vd: người dùng chuyển sang app khác…) và khi người dùng quay lại app thì OS có thể lấy lại thông tin trạng thái trước đó thông qua bundle để tiếp tục làm việc.

9. Common Resource Directories

commonresourcedirectory

10. Resource Variants

  • Android cho phép cung cấp các lựa chọn resources thông qua các suffix
  • Languages: value-es, value-fr…
  • Graphic images: drawable-ldpi, drawble-mdpi, drawable-hdpi…
  • Screen Orientation: landscapes or portrait

11. Android Manifest

androidmanifest

  • Permissions:
    • Xin cấp quyền tương tác với app khác, cung cấp khi tải và cài đặt app.
    • Từ API 23 trở lên: hỏi cấp quyền khi runtime
    • Chỉ khai báo xin quyền khi trong app thực sự sử dụng
  • android:exported trong thẻ <activity> = true cho phép khởi chạy từ activity khác ngoài app, = false chỉ các activities trong app mới chạy được. Nếu không chỉ định thì sẽ phụ thuộc vào ngữ cảnh.

12. Gradle

  • Công cụ được sử dụng cho quá trình tự động hoá build ứng dụng Android
  • Gradle(Project): mức toàn bộ dự án, áp dụng cho tất cả các modules trong dự án
  • Gradle(Module): mức độ module, hầu hết sẽ cấu hình build trên file này vì thông thường một app có 1 module

androidgradle

13. Code completion & Quick Fix

  • Android Studio hỗ trợ tự động suggest code khi đang gõ dở code thông qua tổ hợp phím
    • Windows: Ctrl + Space
    • MacOS: control + Space
    • codecompletion
  • Hỗ trợ Fix nhanh cú pháp/import code thông qua tổ hợp phím
    • Windows: Alt + Enter
    • MacOS: option + return
    • quickfix

14. Tài liệu và cộng đồng Android

androidreferencedocument

15. Các thành phần chính trên Android

androidorganization

  • Activity = customer service department
  • Fragment = customer service representative
  • Service = back office workers
  • Content provider = librarian or bookkeepers, manage storage of application data.
  • Intents = business partnerships
  • Broadcast receivers =network operators
  • Widgets = marketing department
  • Notifications = public relations department

16. Activity Lifecycle

  • Active or running: activity được nạp vào bộ nhớ, hiển thị cho người dùng thao tác
  • Paused: activity được nạp vào bộ nhớ, hiển thị một phần nhưng tạm thời người dùng không tương tác được
  • Stopped: activity được nạp vào bộ nhớ, nhưng không hiển thị cho người dùng. Ở trạng thái này activity vẫn lưu trữ trạng thái và dữ liệu
  • Killed: Nếu hệ thống thiếu bộ nhớ, activity ở trạng thái stopped và paused có thể bị kill. Khi quay lại activity đã bị kill thì sẽ phải restart và restore lại state của nó.

activitylifecycle

Mô tả các hàm callback

activitylifecyclemethods

Ghi chú: các task thông thường ở từng callback

  • onCreated: khởi tạo, load dữ liệu, tạo view
  • onResume: khôi phục các hoạt động bị tạm dừng khi onPause
  • onPause: tạm dừng các hoạt động như chơi nhạc, chơi video, animation. Giải phóng các hoạt động tốn CPU và power. Giải phóng tài nguyên mà activity sử dụng như GPS, camera, sensor. Commit các thay đổi chưa được lưu trữ. Lưu trữ trạng thái dữ liệu cần xử lý cho lần chạy tiếp theo và giải phóng các tài nguyên cần cho activity khác.
  • KHÔNG NÊN chạy các tác vụ tốn thời gian, tài nguyên ở onPause >> NÊN để ở onStop

17. Fragment Lifecycle

fragmentlifecycle.png

18. Các cách lưu trữ dữ liệu trên Android

External storage Nếu là ứng dụng client làm việc với web service thì app có thể lưu trữ và truy xuất dữ liệu từ mạng ở External storage
Preferences Khi cần lưu trữ và truy xuất dữ liệu nhỏ thì có thể dùng Preference. Dữ liệu có thể chỉ được dùng trong 1 activty hoặc có thể được chia sẻ giữa các thành phần trong ứng dụng
Local file hoặc content provider App sử dụng file local hoặc content provider như SQLite database để lưu trữ dữ liệu. Dữ liệu sẽ được lưu trữ ngay mỗi thao tác, khi nhận được sự kiện onPause sẽ thực hiện commit để tránh mất dữ liệu người dùng đã tạo ra/thay đổi.

19. Quản lý bộ nhớ và multitasking trên Android

  • Khi sử dụng thiết bị android người dùng có thể chuyển qua lại nhiều app mà không biết viêc hệ thống sẽ bị chậm đi hoặc tốn pin
  • Hệ thống tự động suspend, terminate và khởi động lại app ở background khi cần thêm bộ nhớ hoặc thấy bị tiêu hao pin mà người dùng không để ý đến.
  • Khi lập trình bạn cần nắm được cách quản lý resource thông qua lifecycle của activity

20. UX trên Android

  • Sử dụng Material Design
  • Giao diện và hành xử giống như các app Android thông thường
  • Không phụ thuộc vào thiết bị (kích thước màn hình, rotation…)
  • Chạy mượt mà.
  • Cung cấp phản hồi khi thích hợp.
  • Cung cấp các tuỳ chỉnh thiết lập.
  • Tương tác với các ứng dụng khác của hệ thống và phần cứng trên thiết bị.
  • Tối ưu hoá không gian màn hình thích hợp theo thiết bị.
  • Không có lỗi về ngữ pháp và chính tả.
  • Thẩm mỹ hài hoà.

21. Ràng buộc khi thiết kế UI trên mobile

  • Small screen: nhiều thiết bị có kích thước màn hình nhỏ. Giải pháp có thể là chia thành nhiều màn hình thao tác >> người dùng có thể mất thời gian hơn >> thiết kế phải đảm bảo cân bằng
  • Mobile data connection: thiết bị có thể sử dụng cellular data để truy cập dữ liệu web, sẽ có độ trễ nhất định >> cần được thiết kế đáp ứng vấn đề này
  • Low power consumption: Android tự động suspend các app chạy ở background để tiết kiệm nguồn. Người dùng dễ để ý tới các app sử dụng tốn tài nguyên và từ bỏ nó. Do vậy cần thiết kế đảm bảo tiết kiệm tài nguyên
  • Laborious text entry: Thiết kế tối thiểu việc nhập liệu bằng text. Nên sử dụng các dữ liệu mặc định, dữ liệu chọn, autocomplete…

 

Ref: giới thiệu một số công cụ để thiết kế prototype, thiết kế UI

Online tool: https://cacoo.com

Offline: MacOS Sketch, Windows: Visio/Photoshop

—————-END—————–

Advertisements