Bài giảng Lập trình di động - Bài 2: Activity (Giao diện tương tác) - Trương Xuân Nam

pdf 43 trang ngocly 3440
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình di động - Bài 2: Activity (Giao diện tương tác) - Trương Xuân Nam", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_di_dong_bai_2_activity_giao_dien_tuong_t.pdf

Nội dung text: Bài giảng Lập trình di động - Bài 2: Activity (Giao diện tương tác) - Trương Xuân Nam

  1. LẬP TRÌNH DI ĐỘNG Bài 2: activity (giao diện tương tác)
  2. Nội dung 1. Bắt đầu với một ứng dụng giản đơn 2. Giao diện phát triển của Android Studio 3. AndroidManifest.xml 4. Các bước phát triển ứng dụng android 5. Các thành phần của một ứng dụng android 6. Khái niệm activity (giao diện tương tác) 7. Vòng đời của một activity TRƯƠNG XUÂN NAM 2
  3. Phần 1 Bắt đầu với một ứng dụng giản đơn TRƯƠNG XUÂN NAM 3
  4. Thiết kế giao diện . Button “THOÁT” . Button “HELLO” . EditText “Name” . Chức năng: . Dừng ứng dụng . Hiện thị lời chào với tên lấy từ nội dung nhập vào EditText TRƯƠNG XUÂN NAM 4
  5. Viết mã xử lý public class MainActivity extends AppCompatActivity { // biến lưu cửa sổ EditText để xử lý EditText name; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // thiết lập giao diện setContentView(R.layout.activity_main); // lấy cửa sổ EditText name = (EditText) findViewById(R.id.editText); // xử lý sự kiện bấm nút "Thoát" findViewById(R.id.button2).setOnClickListener( new View.OnClickListener() { @Override TRƯƠNG XUÂN NAM 5
  6. Viết mã xử lý public void onClick(View v) { finish(); } }); // xử lý sự kiện bấm nút "HELLO" findViewById(R.id.button3).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { String ten = name.getText().toString(); Toast.makeText(MainActivity.this, "CHÀO BẠN " + ten, Toast.LENGTH_LONG).show(); } }); } } TRƯƠNG XUÂN NAM 6
  7. Chạy thử ứng dụng . Hàm “onCreate” khởi chạy sẽ thiết lập giao diện và xử lý sự kiện . Khi bấm nút “THOÁT”: hàm xử lý sự kiện ứng với id button2 được kích hoạt . Khi bấm nút “HELLO”: hàm xử lý sự kiến ứng với id button3 được kích hoạt TRƯƠNG XUÂN NAM 7
  8. Phần 2 Giao diện phát triển của Android Studio TRƯƠNG XUÂN NAM 8
  9. Giao diện của Android Studio TRƯƠNG XUÂN NAM 9
  10. Giao diện của Android Studio TRƯƠNG XUÂN NAM 10
  11. Giao diện của Android Studio . Cửa sổ dự án cho phép người dùng xem các thành phần của dự án theo nhóm . Đây không phải là cấu trúc thực trên hệ thống file . Được phân thành hai nhóm: . Nhóm “app”: các thành phần của ứng dụng . Nhóm “Gradle Scripts”: các tham số điều khiển quá trình dịch và đóng gói ứng dụng TRƯƠNG XUÂN NAM 11
  12. Giao diện của Android Studio . Nhóm “app” gồm 3 nhóm nhỏ: . “manifests”: chứa các file xml cấu hình ứng dụng . “java”: chứa các file mã nguồn java của ứng dụng . “res”: chứa các file tài nguyên của ứng dụng • “drawable”: các file ảnh • “layout”: các file xml bố cục • “values”: các file xml hằng số TRƯƠNG XUÂN NAM 12
  13. Giao diện của Android Studio TRƯƠNG XUÂN NAM 13
  14. Phần 3 AndroidManifest.xml TRƯƠNG XUÂN NAM 14
  15. AndroidManifest.xml . Trước khi chạy, project cần phải được build (dựng), quá trình này phức tạp, nhưng có 2 bước chính . Dịch mã nguồn thành mã nhị phân . Nén tất cả các file mã nhị phân và các file liên quan thành một file duy nhất, có phần mở rộng là apk . Khi cài đặt ứng dụng, hệ thống giải nén file apk và đọc file AndroidManifest.xml ở thư mục gốc . “AndroidManifest.xml” chứa các khai báo về ứng dụng . Qua việc phân tích nội dung của file, hệ thống biết ứng dụng có thể dùng vào việc gì TRƯƠNG XUÂN NAM 15
  16. AndroidManifest.xml . Các thông tin cơ bản trong “AndroidManifest.xml” . Các thông tin về ứng dụng (tên package, tên ứng dụng, biểu tượng của ứng dụng, ) . Các quyền cần có để chạy ứng dụng (quyền truy xuất internet, quyền đọc contact, quyền đọc SD card, ) . Phiên bản API tối thiểu có thể chạy ứng dụng . Các tính năng phần cứng cần thiết cho ứng dụng (GPS, camera, bluetooth, ) . Các bộ API liên kết sử dụng trong ứng dụng (Google Maps API, AdMod, ) . Cấu hình màn hình khởi chạy (ngang/dọc, ) TRƯƠNG XUÂN NAM 16
  17. AndroidManifest.xml . Các thông tin cơ bản trong “AndroidManifest.xml” . Mô tả về các activity (màn hình) của ứng dụng • Thông tin về activity (tên activity, tên class, .) • Xác định xem activity nào là giao diện khởi động của ứng dụng . Mô tả về các service (dịch vụ) mà ứng dụng cung cấp • Thông tin về service (tên dịch vụ, class xử lý dịch vụ, ) . Mô tả về các broadcast receiver mà ứng dụng cung cấp • Thông tin về receiver (tên receiver, class xử lý, ) • Các loại tín hiệu gửi đến receiver . Mô tả về các content provider mà ứng dụng cung cấp • Các đối tượng truy xuất content provider • Các quyền truy xuất content provider TRƯƠNG XUÂN NAM 17
  18. AndroidManifest.xml TRƯƠNG XUÂN NAM 18
  19. Phần 4 Các bước phát triển ứng dụng android TRƯƠNG XUÂN NAM 19
  20. Các bước phát triển android apps 1. Nghiên cứu nhu cầu 2. Xây dựng giải pháp . Giải pháp có thể gồm các thành phần ngoài android (chẳng hạn như web service) . Đôi khi giải pháp không đáp ứng được nhu cầu do hạn chế về công nghệ 3. Viết ứng dụng 4. Phát hành ứng dụng 5. Nhận phản hồi, chỉnh sửa và nâng cấp TRƯƠNG XUÂN NAM 20
  21. Viết ứng dụng . Thiết kế phác họa giao diện (mockup) . Chuẩn bị các tài nguyên (file ảnh, file âm thanh, video, văn bản, ) . Thiết kế giao diện . Các activity (mỗi giao diện là một activity) . Lưu dạng XML để dễ dàng chỉnh sửa . Viết mã . Các mã khởi tạo giao diện . Các mã hoạt động nền . Các mã liên kết giữa nền và giao diện TRƯƠNG XUÂN NAM 21
  22. Phần 5 Các thành phần của một ứng dụng android TRƯƠNG XUÂN NAM 22
  23. Ứng dụng android . Mỗi ứng dụng android đều chạy trên một tiến trình riêng trong một máy ảo riêng biệt . Mỗi ứng dụng android là tập hợp các class, mỗi class có mục đích cụ thể . Hệ điều hành sẽ chủ động gọi thực thi class phù hợp khi thấy cần thiết . Như vậy ta thấy ứng dụng android hơi có tính “bị động”, các class sẽ được hệ điều hành chủ động gọi ra chạy, điều này khác với cách viết thông thường (hàm main chạy trước tiên, hàm main sẽ quyết định quá trình thực thi của ứng dụng) TRƯƠNG XUÂN NAM 23
  24. Activity . Một activity là một màn hình giao diện, một ứng dụng gồm một hoặc nhiều activity . Android OS cung cấp sẵn một số lượng khá lớn các activity tiêu chuẩn . Ví dụ: . Giao diện quay số và gọi điện . Giao diện settings . Lập trình viên có thể tự viết activity riêng hoặc sử dụng các activity đã có TRƯƠNG XUÂN NAM 24
  25. Activity . Activity settings, được . Một activity được bên cung cấp bởi hệ thống thứ 3 tự xây dựng TRƯƠNG XUÂN NAM 25
  26. Service . Service là một tiến trình thực thi một công việc chạy ngầm (thường không có hoặc rất ít tương tác với người sử dụng) . Ví dụ: . Điều khiển việc chạy file nhạc . Thực hiện việc download/upload dữ liệu . Theo dõi và cảnh báo dung lượng pin . Theo dõi xem có cập nhật MXH hay không? . Ghi nhận ngầm thông tin (GPS chẳng hạn) TRƯƠNG XUÂN NAM 26
  27. Content provider . Content provider (còn gọi tắt là provider) dùng quản lý việc chia sẻ (dùng chung) một nguồn dữ liệu nào đó. Ví dụ: . Danh sách người dùng trên điện thoại . Dữ liệu về các cuộc gọi . Dữ liệu về tin nhắn . Bằng cách chia sẻ dữ liệu để dùng chung, Android OS làm cho các ứng dụng dễ dàng cung cấp trải nghiệm nhất quán cho người dùng (chẳng hạn các ứng dụng thoại dùng chung danh bạ điện thoại) TRƯƠNG XUÂN NAM 27
  28. Broadcast receiver . Broadcast receiver (còn gọi tắt là receiver) là một thành phần hồi đáp những tín hiệu được phát ra trên toàn hệ thống. Ví dụ: . Tín hiệu pin yếu . Tín hiệu mất kết nối mạng . Tín hiệu có cuộc gọi tới . Lập trình viên có thể chặn các tín hiệu này và xử lý theo cách riêng của mình. Chẳng hạn: . Ứng dụng ngắt cuộc gọi đến từ số điện thoại quấy rối . Bật âm thanh cảnh báo khi điện thoại đã nạp đầy pin TRƯƠNG XUÂN NAM 28
  29. Intent . Intent là cơ chế chuẩn của Android OS để truyền thông tin giữa các thành phần cho nhau (giữa activity với nhau, activity cho service, receiver cho service, ) . Chẳng hạn có thể sử dụng Intent để: . Gọi một service . Mở một activity . Hiển thị một trang web hoặc danh sách contacts . Hiển thị gallery để chọn ảnh TRƯƠNG XUÂN NAM 29
  30. Các thành phần của ứng dụng TRƯƠNG XUÂN NAM 30
  31. Cách thực thực thi điển hình Content Broadcast Services Providers receiver Notification Intent TRƯƠNG XUÂN NAM 31
  32. Phần 6 Khái niệm activity (giao diện tương tác) TRƯƠNG XUÂN NAM 32
  33. Activity . Các activity là thành phần cơ bản của bất kỳ một ứng dụng android nào, chúng cung cấp giao diện người dùng cho ứng dụng . Lớp Activity đảm nhận việc tạo ra một cửa sổ (window), sau đó ta có thể đặt lên đó một giao diện bằng lệnh setContentView(View) . Thông thường mỗi màn hình sẽ là một activity, một ứng dụng thường gồm nhiều activity chuyển qua lại lẫn nhau TRƯƠNG XUÂN NAM 33
  34. Activity . Một activity có thể mang nhiều dạng khác nhau: . Cửa sổ chiếm toàn bộ màn hình . Cửa sổ chiếm một phần màn hình . Nằm lồng bên trong một activity khác . Để có thể sử dụng, mọi activity đều phải được khai báo trong AndroidManifest.xml với thẻ TRƯƠNG XUÂN NAM 34
  35. Tạo Activity Mỗi activity trình bày một màn hình, class xử lý activity bao giờ cũng kế thừa lớp Activity của Android TRƯƠNG XUÂN NAM 35
  36. Khởi tạo giao diện bên trong . Có 2 cách đơn giản để tạo giao diện cho activity . Tự tạo giao diện bằng viết mã @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); MyView myView = new MyView(this); setContentView(myView); } . Nạp giao diện đã thiết kế trên file layout (.xml) @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); } TRƯƠNG XUÂN NAM 36
  37. Gọi activity khác . Gọi trực tiếp activity đã định nghĩa Intent i = new Intent(this, MyActivity.class); startActivity(i); . Gọi gián tiếp activity Intent i = new Intent(Intent.ACTION_SEND); i.putExtra(Intent.EXTRA_EMAIL, addList); startActivity(intent); . Khi gọi gián tiếp, hệ thống tự chọn activity phù hợp nhất với yêu cầu (sẽ được thảo luận sau) TRƯƠNG XUÂN NAM 37
  38. Phần 7 Vòng đời của một activity TRƯƠNG XUÂN NAM 38
  39. Vòng đời của một activity . Các activity được quản lí trong một stack chứa activity (cơ chế vào trước ra sau): . Khi ứng dụng được mở lên thì activity chính sẽ được tạo ra, nó sẽ được thêm vào đỉnh của stack . Lúc này chỉ có duy nhất activity trên cùng là hiển thị nội dung đến người dùng . Tất cả các activity còn lại đều chuyển về trạng thái dừng hoạt động . Khi một activity bị đóng nó sẽ bị loại khỏi stack, activity nằm dưới đó sẽ chuyển từ trạng thái tạm dừng sang trạng thái hoạt động TRƯƠNG XUÂN NAM 39
  40. Các sự kiện trong vòng đời của APP . Khi một activity bị chuyển qua chuyển lại giữa các trạng thái, nó được cảnh báo việc chuyển này bằng hàm chuyển trạng thái (transition) . Có thể viết lại các hàm chuyển này nếu cần làm các công việc giúp việc chuyển trạng thái suôn sẻ 1. protected void onCreate(Bundle b); 2. protected void onStart(); 3. protected void onRestart(); 4. protected void onResume(); 5. protected void onPause(); 6. protected void onStop(); 7. protected void onDestroy(); TRƯƠNG XUÂN NAM 40
  41. Các hàm trong vòng đời activity . onCreate( ): gọi khi activity khởi tạo . onStart(): gọi khi acivity xuất hiện trên màn hình . onResume(): gọi ngay sau onStart hoặc người dùng focus, hàm này đưa ứng dụng lên top màn hình . onPause(): gọi khi hệ thống focus đến activity khác . onStop(): gọi khi activity bị che hoàn toàn . onRestart(): gọi khi ứng dụng khởi chạy lại . onDestroy(): gọi khi ứng dụng chuẩn bị được gỡ khỏi bộ nhớ TRƯƠNG XUÂN NAM 41
  42. Vòng đời của một activity . Một activity có bốn trạng thái: . Active hay Running: activity đang chạy trên màn hình . Paused: khi một activity mất focus nhưng vẫn đang chạy trên màn hình (một activity trong suốt hoặc một activity không chiếm toàn bộ màn hình thiết bị đè lên) . Stopped: khi một activity bị che khuất hoàn toàn bởi một activity khác . Killed hay Shutdown: khi một activity đang Paused hay Stopped, hệ thống có thể xóa activity ấy nếu cần (chẳng hạn như cần bộ nhớ vào việc khác) TRƯƠNG XUÂN NAM 42
  43. Vòng đời của một activity TRƯƠNG XUÂN NAM 43