1.3.1 Giới thiệu về Android
1.3.1.1 Android là gì?
Android là một nền tảng phần mềm mở. Rất nhiều người hiểu đơn giản Android chỉ là một hệ điều hành dành cho các điện thoại di động thông minh (SmartPhone). Tuy nhiên nhắc đến Android là nói đến một nền tảng bao gồm cả phần mềm lẫn phần cứng. Đó là một nền tảng gồm phần cứng , hệ điều hành và nền tảng phát triển phần mềm ( Android SDK và Java ). Một nền tảng được Google phát triển dựa trên nhân Linux.
1.3.1.2 Các tính năng của Android
Application framework cho phép dùng lại và thay thế các thành phần
Dalvik vitual machine là máy ảo Dalvik làm tối ưu cho các thiết bị di động
Integrated browser dựa trên mã nguồn mở WebKit
Optimized graphics hỗ trợ thư viện đồ họa 2D, 3D dựa trên OpenGL ES 1.0
SQLite cấu trúc cơ sở dữ liệu
Media support hỗ trợ các tính năng chơi nhạc, audio, video, ảnh dưới định dạng các file như (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
GSM Telephony hỗ trợ công nghệ GSM cho điện thoại
Bluetooth, EDGE, 3G, and WiFi
Camera, GPS, compass, and accelerometer
1.3.1.3 Kiến trúc của Android
Cách dễ dàng nhất có thể hình dung cấu trúc của Android giống như một ngôi nhà có 5 căn phòng. Tên những căn phòng này giống như trong hình vẽ: Applications, Application Framework, Libraries, Android Runtime, Linux Kernel. Bây giờ tiếp tục hình dung, mỗi căn phòng chứa một số lượng người nhất định. Mỗi người tương ứng là những nút và tên của những người này cũng thể hiện trên các nút đó. Những phòng khác nhau sẽ có số lượng người khác nhau. Mỗi người sẽ có một chức năng riêng biệt gì đó trong căn nhà mang tên Android.
Hình 1.19: Kiến trúc Android
a. Ứng dụng (Application)
Căn phòng đâu tiên bạn bước vào khi đến với ngôi nhà Android. Tất cả những người trong căn phòng này chính là các ứng dụng mà bạn có trong thiết bị chạy Android. Là những thứ mà bạn dễ dàng thấy được trên màn hình: Phone, Contact, các trò chơi, chương trình bạn cài vào… và một số ứng dụng chạy ngầm mà bạn không thấy được.Hầu hết ứng dụng được viết bằng Java (hoặc C). Có thể ví căn phòng này giống như căn phòng riêng của bạn, bạn có thể cho ai đó vào ở (cài đặt ứng dụng) hay nếu “không ưa” ai đó thì có thể “tiễn” họ đi (gỡ bỏ ứng dụng) tùy thích. Những phòng còn lại bạn không có quyền làm như thế.
b. Khung ứng dụng (Application Framework)
Căn phòng này gồm những người có quyền cao hơn những người trong phòng Applications. Những người này sẽ có những nhiệm vụ “quản lí” những người ở phòng Applications.Ví dụ: Content Provider cho phép chia sẻ thông tin giữa các ứng dụng, Resource Mananger: quản lí các vấn đề liên quan đến đồ họa, các file layout.., Notification Manager quản lí các cảnh báo: tiếng bíp, đèn led… Activity Manager: quản lí hoạt động của các ứng dụng. Các framework này giống như là bộ ứng dụng sườn của Android. Có rất nhiều nhân vật trong căn phòng này công việc của họ các bạn cũng có thể đoán ra thông qua tên gọi của họ. Mà đa số họ đều là Quản Lí (Manager) hày Nhà cung cấp (Provider).
c. Thư viện (Libraries)
Căn phòng này giống như nhà bếp của ngôi nhà. Tất cả mọi người ở phòng Applications hay Application Framework muốn làm việc thì phải lấy một thứ gì đó trong phòng này cho vào “bụng” thì mới làm việc được. Nghĩa là khi ứng dụng chạy sẽ gọi các hàm nằm trong thư viện này. Các lập trình viên cũng sẽ dùng những hàm trong các thư viện này để phát triển ứng dụng.
Ví dụ: Media Framework sẽ được gọi khi các chương trình có liên quan đến Media như nghe nhạc, xem ảnh. Hay WebKit sẽ liên quan đến Internet, SQLite liên quan đến cơ sở dữ liệu. Một chương trình có thể phải cần nhiều thư viện trong căn phòng này.
a. Android Runtime
Có thể nói rằng căn phòng ‘Android runtime’ là một nơi khá đặc biệt. Nó chỉ có 2 người: Dalvik Virtual Machine và những thư viện nhân (core libraries). Những thư viện cơ bản của hệ điều hành, chỉ cung cấp cho hệ điều hành.Trong Google Android, có một công cụ được gọi là ‘DX’ nó sẽ chuyển những ứng dụng thành dạng Dalvik Executable (.dex). Đây chính là những file đặc biệt dùng cho Dalvik Virtual Machine. Định dạng này cũng được tạo ra nhằm làm tối thiểu kích thước chương trình, làm cho nó tương thích với thiết bị di động. Dalvik Virtual Machine là một chương trình được viết để Android có thể chạy đa nhiệm nhanh và mượt.
e. Linux Kernel
Căn phòng nhỏ này chứa những trình điều khiển (drivers) dùng để điều khiển phần cứng như Keypad, Wifi, Camera, Audio, Màn hình… Phòng này có thể coi như là “Trung tâm chỉ huy” của ngôi nhà. Linux Kernel nắm giữ những gì là cốt lõi của hệ điều hành. Các giải thuật quản lí tài nguyên, chuyển đổi qua lại giữa các tác vụ, phân chia quyền, giải quyết tranh chấp cũng có thể xem nó như là “phòng công tác đối ngoại” vì nó đảm nhận việc tương tác với thiết bị ngoại vi. Nó chính là nhân Linux 2.6.
1.3.2 Hoạt động (Activity)
Activityhiểu một cách đơn giản thì Activity là nền của 1 ứng dụng. Khi khởi động một ứng dụng Android nào đó thì bao giờ cũng có một Activity chính được gọi, hiển thị màn hình giao diện của ứng dụng cho phép người dùng tương tác.
1.3.2.1 Các loại tiến trình trong Android
Android có cơ chế quản lý các process theo chế độ ưu tiên. Các tiến trình có độ ưu tiên thấp sẽ bị Android giải phóng mà không hề cảnh báo nhằm đảm bảo tài nguyên.
Một ứng dụng Android sẽ 5 loại tiến trình
Foreground process: là tiến trình của ứng dụng hiện thời đang được người dùng tương tác.
Visible process: là tiến trình của ứng dụng mà activity đang hiển thị đối với người dùng (onPaused() của activity được gọi).
Service process: là dịch vụ đang đang chạy.
Background process: là tiến trình của ứng dụng mà các activity của nó ko hiển thị với người dùng (onStoped() của activity được gọi).
Empty process: tiến trình không có bất cứ 1 thành phần nào hoạt động. Theo chế độ ưu tiên thì khi cần tài nguyên, Android sẽ tự động hủy tiến trình, trước tiên là các tiến trình rổng.
1.3.2.2 Vòng đời của một Activity của Android
Actitvity là thành phần quan trọng nhất và đóng vai trò chính trong xây dựng ứng dụng Android. Hệ điều hành Android quản lý Activity theo dạng ngăn xếp có nghĩa là khi một Activity mới được khởi tạo, nó sẽ được xếp lên đầu của ngăn xếp và trở thành running activity, các Activity trước đó sẽ bị tạm dừng và chỉ hoạt động trở lại khi Activity mới được giải phóng.
Một Activity bao gồm 4 trạng thái:
- active (running): Activity đang hiển thị trên màn hình (foreground).
- paused: Activity vẫn hiển thị (visible) nhưng không thể tương tác (lost focus).
Ví dụ: một activity mới xuất hiện hiển thị giao diện đè lên trên activity cũ, nhưng giao diện này nhỏ hơn giao diện của activity cũ, do đó ta vẫn thấy được 1 phần giao diện của activity cũ nhưng lại không thể tương tác với nó.
- stop: Activity bị thay thế hoàn toàn bởi Activity mới sẽ tiến đến trạng thái stop
- killed: Khi hệ thống bị thiếu bộ nhớ, nó sẽ giải phóng các tiến trình theo nguyên tắc ưu tiên. Các Activity ở trạng thái stop hoặc paused cũng có thể bị giải phóng và khi nó được hiển thị lại thì các Activity này phải khởi động lại hoàn toàn và phục hồi lại trạng thái trước đó.
Biểu đồ miêu tả trạng thái của một Activity
Bắt đầu một Activity |
onCreate() |
onStart() |
onRestart() |
onPause() |
onStop() |
onDestroy() |
Kết thúc một Activity |
Activity đang hoạt động
|
Hủy tiến trình |
onResume() |
Một Activity khác nhảy vào |
Activity ở trạng thái chờ lâu |
Một ứng dụng khác cần bộ nhớ |
Hình 1.20: Biểu đồ trạng thái của một Activity
Vòng đời của Activity:
- Entire lifetime: Từ phương thức onCreate( ) cho tới onDestroy( )
- Visible liftetime: Từ phương thức onStart( ) cho tới onStop( )
- Foreground lifetime: Từ phương thức onResume( ) cho tới onPause( )
Khi xây dựng Actitvity cho ứng dụng cần phải viết lại phương thức onCreate( ) để thực hiện quá trình khởi tạo. Các phương thức khác có cần viết lại hay không tùy vào yêu cầu lập trình.
1.3.3 Tạo một ứng dụng trên Android
- Đầu tiên ta phải tạo một AVDM (Android Virtual Device Manager). Mục đích của việc này là ta tạo ra một máy ảo được mô phỏng như một thiết bị chạy Android thật. Ta có thể chọn nền tảng Android mà ta thích để lập trình. Có nhiều nền tảng ta có thể chọn từ 1.0 cho tới 4.0. Với mỗi AVDM này ta có thể chọn mà hình máy ohuf hợp cho việc nhúng ứng dụng của mình vào thiết bị thật có màn hình tương ứng.
- Mở Eclipse chọn Window/AVD Manager sau đó ta chọn “New”
- Điền tên của AVD Manager mà ta đặt, chọn nền tảng Android vào các khung tùy chọn. Và chọn “Create AVD”.
Hình 1.21: Tạo AVD Manager Hình 1.22: Đặt tên cho dự án
Sau khi tạo xong AVD ta mở Eclipse có tích hợp sẵn Android. Tạo một dự án Android mới. Ví dụ: myApp. Ta làm như hình 3.7
Tiếp theo ta chọn nền tảng Android để lập trình. Ta chọn Android 2.2. Và ta đặt tên gói là com.hoanganh.myapp
Hình 1.23: Chọn nền tảng Hình 1.24: Đặt tên gói và kết thúc tạo dự án
Dự án đã được tạo và có mặt tại khung Package Explorer. Ở đây ta cần chú ý những điểm sau:
Trong thư mục res ta thấy những thư mục: drawable, layout, values
Hình 1.25: Gói dự án
- drawable: thư mục chứa các hình ảnh để làm icon hoặc tài nguyên cho giao
diện...
- layout: chứa các file xml để thiết kế giao diện.
- values: chứa các giá trị sử dụng trong ứng dụng được bạn định nghĩa, như các dòng ký tự (string), các màu (color), các themes...
Vào thư mục layout, chọn file main.xml và gõ đoạn code sau vào thay cho toàn bộ nội dung có sẵn (Eclipse hỗ trợ kéo thả cho xml nhưng theo ta không nên sử dụng):
Mã:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro id" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <EditText android:id="@+id/edit_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/edit_hint" /> <TextView android:id="@+id/text_view" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@color/text_color" android:textSize="28px" android:typeface="monospace" /> </LinearLayout> |
Trong đoạn XML này chúng ta khai báo một Linear Layout với 2 thành phần con của nó là 1 Edit Text (dùng để gõ xâu ký tự) với 1 Text View (hiển thị xâu ký tự). Linear Layout được khai báo với từ khóa orientation nhằm chỉ ra chiều sắp xếp của hai thành phần con là chiều dọc. Còn với layout_width, layout_height các ta có thể cho giá trị bằng "fill_parent" hoặc "wrap_content" để thông báo thành phần này sẽ có chiều rộng (dài) phủ đầy thành phần cha hoặc chỉ vừa bao đủ nội dung. Trong Edit Text và Text View các bạn có thể thấy có từ khóa id, từ khóa này cho phép khai báo id của các thành phần để lấy về trong code (sẽ đề cập sau).
Ngoài ra từ khóa hint trong Edit Text cho phép hiện ra phần nội dung mờ khi Edit Text vẫn chưa có ký tự nào. "@string/edit_hint" thông báo lấy trong file strings.xml xâu có tên là edit_hint. Còn textColor của Text View thì thông báo đoạn ký tự sẽ được hiển thị với màu lấy trong file colors.xml, textSize chỉ ra cỡ chữ bằng 28 pixel và typeface chỉ ra kiểu chữ là monospace
Vẫn trong thư mục res, vào values và chọn file strings.xml. Bố sung thêm dòng định nghĩa cho edit_hint như sau:
Mã:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, Example!</string> <string name="app_name">Example 1</string> <string name="edit_hint">Enter the work here</string> </resources> |
Trong thư mục values, tạo file colors.xml (chuột phải vào thư mục, chọn New/Android XML File, và lưu ý chữ s, không phải là color.xml). Gõ nội dung cho file như sau:
Mã:
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="text_color">#ff3300</color> </resources> |
Vậy là ta đã tạo một màu mới cho dòng chữ sẽ được hiển thị trong TextView (ff3300 là mã hexa của màu đỏ).Thực chất bạn hoàn toàn có thể gõ thẳng trong file main.xml mà không cần tạo mới file colors.xml, nhưng mục đích của XML trong Android chính là để hỗ trợ nâng cấp chỉnh sửa dễ dàng. Nếu sau này bạn muốn sửa màu của dòng text thì chỉ cần vào colors.xml thay đổi thay vì mò mẫm trong main.xml (có thể rất dài nếu giao diện phức tạp).
Mã:
android:textColor="#ff3300" |
Các thành phần trên mới chỉ là các phần cơ bản của XML. Ngoài ra các ta có thể khai báo thêm về Animation, Style và Theme.
Vậy là chúng ta đã hoàn thiện phần giao diện với XML, giờ đến viết code để xử lý các sự kiện cho các thành phần: Vào thư mục src (source code của project), gõ nội dung code sau vào MyAppActivity.java
Mã:
package com.hoanganh.myapp; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.View.OnKeyListener; import android.widget.EditText; import android.widget.TextView; public class Example extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final EditText edit = (EditText) findViewById(R.id.edit_text); final TextView text = (TextView) findViewById(R.id.text_view); edit.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode,KeyEvent event) { if (event.getAction()==KeyEvent.ACTION_DOWN && keyCode==KeyEvent.KEYCODE_DPAD_CENTER) { text.setText(edit.getText().toString()); edit.setText(""); return true;} else { return false; } } }); } } |
Chạy chương trình và ta có kết quả sau:
Hình 1.26: Kết quả
» Tin mới nhất:
» Các tin khác: