Tải bản đầy đủ
7 Cấu trúc của một project Android

7 Cấu trúc của một project Android

Tải bản đầy đủ

: Mỗi Activity phải có 1 tag với tên tương ứng
trong file Androidmanifest.xml nếu không chúng ta sẽ không thể chạy
nó. Mỗi Activiy có thể chứa 1 hoặc nhiều Intent-Filter mô tả các hành
động mà Activity này hỗ trợ.

: Mô tả các loại Intent mà một thành phần ứng dụng có
thể hỗ trợ. Bên trong tag này có thể chứa nhiều tag khác như:
, , ,
: Một Services là một thành phần của ứng dụng và có thể
chạy ở chế độ nền trong một khoảng thời gian tùy ý. Cũng như
Activity chúng ta cũng có thể khai báo ,
cho mỗi Service.
: Một ContentProvider là một thành phần của ứng dụng
quản lý các dữ liệu liên tục và cho phép các thành phần khác truy cập
đến nó. Chúng ta có thể khai báo 1 hoặc nhiều cho một
ContentProvider.
1.7.2 File R.java
- R.java là file tự sinh khi ta tạo một project, nó tự động tạo chỉ số và quản lý
các thuộc tính được khai báo trong file xml và các tài nguyên của ứng dụng (như
hình ảnh, âm thanh…), tự động được cập nhật khi có thay đổi trong ứng dụng.
Chúng ta sử dụng lớp này trong mã lệnh như một cách nhanh nhất để tham chiếu
đến các tài nguyên đã khai báo trong ứng dụng.
1.7.3 Các tài nguyên dùng trong một ứng dụng Android
- Các file tài nguyên của một ứng dụng có liên quan rất chặt chẽ tới file
R.xml, các thay đổi trong các file tài nguyên sẽ được tự động thay đổi trong R.xml
- Các file tài nguyên của ứng dụng Android là các file ngoài (không chứa mã
lệnh) được sử dụng trong mã lệnh và biên dịch vào thời gian chạy của ứng dụng.
Android hỗ trợ nhiều loại file tài nguyên như: xml, jpg, png, mp3… Các file xml có
rất nhiều cấu trúc khác nhau tùy thuộc vào mục đích sử dụng cũng như cách thức

17

môt tả nó. Các tài nguyên dùng trong ứng dụng Android được tách rời với mã lênh,
các file xml được biên dịch sang dạng nhị phân, một định dạng giúp cho việc load
dữ liệu nhanh và hiệu quả hơn, các dữ liệu String sẽ được nén vào các hình thức lưu
trữ hiệu quả hơn.
- Các file tài nguyên được lưu trong thư mục /res của ứng dụng android, bao
gồm một số loại sau :
 Các file giao diện, chứa trong thư mục /res/layout: Các file này mô tả
cách thức bố trí của giao diện trong một Activity hay trong một thành
phần của giao diện người dùng
 Image file, đặt trong thư mục res/drawable: Android hỗ trợ các loại
ảnh như jpg, png, gif.
 Style, strings và arrays, chứa trong thư mục res/values
- Muốn sử dụng các tài nguyên đã định nghĩa trong các file xml của gói ứng
dụng ta chỉ cần gọi đến id của nó.
 Để gọi các tài nguyên của gói ứng dụng hiện tại, ta sử dụng cấu trúc:
R.resource_type.resource_name
 Để gọi các tài nguyên trong gói ứng dụng khác, ta sử dụng cấu trúc :
[package_name]. R.resource_type.resource_name
1.8. Các thành phần cơ bản của 1 ứng dụng Android
1.8.1 Activity
- Activity là 1 thành phần của ứng dụng cung cấp 1 màn hình mà người dùng
có thể tương tác theo thứ tự để thực hiện việc gì đó như: thực hiện cuộc gọi, chụp
ảnh, gửi Email, xem bản đồ… Một của sổ ứng dụng thường lấp đầy màn hình nhưng
cũng có thể nhỏ hơn hoặc nổi trên cùng của màn hình. Một Activity có thể sử dụng
cửa sổ bổ xung, ví dụ như một pop-up dialog gọi cho một đáp ứng người dùng ở
giữa của Activity, hay một cửa sổ biểu diễn những cho người dùng với thông tin
quan trọng khi họ chọn một item cụ thể trên màn hình.

18

- Một ứng dụng thường bao gồm 1 tập hợp các Activity được ràng buộc với
nhau. Thông thường trong ứng dụng có 1 Activity được gọi là Activity chính,
Activity này sẽ được hiện ra khi người sử dùng bắt đầu sử dụng ứng dụng. Một
Activity có thể bắt đầu các Activity khác theo thứ tự thực hiện các hành động khác
nhau. Mỗi lần 1 Activity mới được bắt đầu thì các Activity trước bị dừng lại, hệ
thống bảo tồn các Activity này trong 1 ngăn xếp (gọi là backstack). Khi người dùng
thao tác xong với Activity hiện tại và nhấn nút BACK thì Activity này bị huỷ và
Activity trước được khôi phục.
- Giao diện người dùng cho các Activity được xây dựng bởi kiến trúc phân
cấp các đối tượng View dẫn xuất từ lớp View. Mỗi View chiếm một khoảng không
gian hình chữ nhật bên trong cửa sổ của Activity và có thể đáp ứng được các tương
tác người dùng. Một cấu trúc phân cấp các view được gắn vào Activity thông qua
phương thức: Activity.setContentView().
- Android cung cấp sẵn một số view cho phép người dùng sử dụng để thiết kế
và tổ chức các layout. Widget là view cung cấp các thành phần trực quan và tương
tác cho màn hình như: button, textfield, checkbox hoặc chỉ là 1 hình ảnh…
- Layout là views được dẫn suất từ ViewGroup cung cấp một mô hình bố trí
nhất định cho các view con của nó như: linerLayout, GridLayout, RelativeLayout.
Cách phổ biến để tạo ra layout cho ứng dụng là sử dụng file XML được lưu trong
thư mục của ứng dụng. Bằng cách này chúng ta có thể duy trì các thiết kế của giao
diện người dùng tách biệt với mã nguồn khai báo các hành vi của Activity.
- Mỗi Activity phải được khai báo trong file AndroidManifest.xml. Mỗi
Activity có thể truyền hay nhận dữ liệu từ Activity khác.
- Một tác vụ trong một ứng dụng Android là một ngăn xếp các Activiy. Khi
một Activity mới được start, nó được đặt ở đỉnh của stack và trở thành activity đang
chạy Activity trước sẽ ở bên dưới Activity mới và sẽ không thấy trong suốt quá trình
activity mới tồn tại. Nếu người dùng nhấn nút Back thì activity kết tiếp của stack sẽ
di duyển lên và trở thành active.

19

Hình 1.2 Android Back Stack
* Vòng đời của 1 Activity:
 onCreate(): Được gọi khi hoạt động được tạo ra lần đầu tiên. Luôn
theo sau bởi onStart(). Đây là lúc lập trình viên cần thiết lập tất cả các
cài đặt tĩnh cơ bản, như khởi tạo các view, ràng buộc dữ liệu vào danh
sách.
 onStart(): Được gọi ngay khi ứng dụng được nhìn thấy với người
dùng. Theo sau bởi onResume() nếu ứng dụng bắt đầu hoạt đông.
Hoặc onStop() nếu ứng dụng bị ẩn đi.
 onResume(): Được gọi ngay khi Activity tương tác với người dùng,
lúc này Activity ở trên đỉnh của ngăn xếp. luôn theo sau bởi
onPause().
 onPause(): Được gọi khi hệ thống bắt đầu khôi phục lại các activity
khác. Phương thức này được dùng để thực hiện các thay đổi chưa
được lưu, tạm dừng các hành vi có thể tiêu thụ CPU, theo sau bởi

20

OnResume khi Activity được khôi phục hoặc onStop() nếu nó trở nên
vô hình với người dùng.
 onStop(): Được gọi khi ứng dụng không còn được nhìn thấy. Hành
động này sảy ra khi nó bị huỷ hoặc Activity khác đã được khôi phục.
Theo sau bởi onRestart() nếu Activity trở lại và tương tác với người
dùng, hoặc theo sau là onDestroy() nếu ứng dụng kết thúc.
 onDestroy(): Được gọi khi Activity bị huỷ. Nó có thể được gọi khi
Activity kết thúc hoặc hệ thống tạm thời phá huỷ nó để bảo tồn bộ
nhớ.
onRestart(): Được gọi ngay khi Activity được bắt đầu trở lại. Luôn
theo sau bởi onStart().

Hình 1.3 Vòng đời của Activity

21

- Một Activity có thể gọi đến 1 Activity khác thông qua 1 Intent. Việc gọi
đến 1 Activity khác có thể có dữ liệu trả về từ Activity được gọi hoặc có thể không
trả về dữ liệu nào.
 Để gọi 1 Activity khác nhưng không cần trả về dữ liệu nào, ta dùng
phương thức startActivity()
 Để gọi 1 Activity khác những cũng cần có DL trả về ta dùng phương
thức startActivityForResult(). Khi đó, Activity được gọi sẽ trả lại DL
cho Activity gọi nó sau khi hoàn thành qua phương thức finish().
Activity ban đầu lấy dữ liệu được gửi tới bởi phương thức
onActivityResult().
* Các loại Activity
- ListActivity là 1 Activity hiển thị danh sách các items bằng cách liên kết với
1 nguồn dữ liệu như một mảng, một con trỏ và nắm bắt các sự kiện khi người dùng
chọn 1 item trong danh sách. Một ListActivity có một layout mặc định bao gồm 1
danh sách đơn ở giữa của màn hình. Tuy nhiên, nếu muốn chúng ta cũng có thể tùy
chọn giao diện bằng cách thiết lập layout của chúng ta với setContentView() trong
phương thức onCreate().
- PreferenceActivity: Khi chúng ta xây dựng 1 ứng dụng Android, thông
thường chúng ta muốn có một số tùy chọn cho ứng dụng như: Cách thức hiện thị,
giao diện tùy chọn, cài đặt ứng dụng hay chia sẻ thông tin với các thành phần
khác… Các tùy chọn này sẽ được lưu trữ trong bộ nhớ trong của thiết bị gọi là các
Shared Preferences. Android cung cấp 1 số cơ chế để thực hiện việc này, một trong
số đó là lớp preferenceActivity. Để làm được điểu này trước hết ta cần khai báo 1
file xml chứa các Preferences file này được đặt trong thư mục res/xml. Tiếp theo ta
cần tạo 1 Activity kế thừa từ lớp PreferenceActivity. Trong phương thức onCreate()
ta gọi phương thức addPreferencesFromResource(int xmlResource) để gắn các
Preferences vào Activity. Sau đó trong ứng dụng ta có thể truy cập đến các Shared

22