Saturday, October 6, 2012

Intent trong Android



Intent:
  • Là một cấu trúc dữ liệu mô tả cách thức,đối tượng thực hiện của 1 Activity
  • Là cầu nối giữa các Activity:một ứng dụng Android gồm nhiều Activity và mỗi Activity thực hiện một nhiệm vụ khác nhau
  • Intent giống người đưa thư giúp chúng ta truyền triệu gọi cũng như truyền dữ liệu cần thiết để có thể thực hiện Activity này từ Activity khác (tương tự như di chuyển qua lại giữa các window Form)
  • Intent là khái niệm đặc trưng và then chốt của Android Platform  
Một Intent được thực hiện bởi các thành phần khác nhau như
  • Mong muốn hành động hoặc dịch vụ
  • Dữ liệu,loại thành phần nên xử lý
  • Các ý định và hướng dẫn về việc làm thế nào khởi động một activity
Intent Filter: Activity, ServiceBroadCast Receiver sử dụng Intent Filter để thông báo cho hệ thống biết các dạng Implicit Intent (cái này là gì thì tí nữa sẽ định nghĩa sau) mà nó có thể xử lý,hay nói cách khách Intent filter là bộ lọc Intent,chỉ cho phép những Intent được chỉ định đi qua nó.

Các thuộc tính của Intent:
  • Component name:tên của component mà sẽ xử lí intent (ví dụ: “com.example.project.app.MyActivity1”),khi thuộc tính này được xác định thì các thuộc tính khác sẽ thành không bắt buộc(optional)
  • Action:là một chuỗi đặt tên cho các hành động mà Intent sẽ yêu cầu thực hiện (ví dụ:Action_view,action_call…)
  • Data:là xử liệu sẽ được xử lí trong action thường được biểu diễn dưới dạng URI (ví dụ : tel:/216 555-1234 , "http://maps.google.com”, ...)
  • Category:bổ sung thông tin cho các action của Intent (ví dụ: Category_launcher thông báo sẽ thêm launcher như một ứng dụng top level)
  • Extras:chứa tất cả các cặp (key,value) do ứng dụng thêm vào để truyền qua Intent (cấu trúc Bundle)
  • Type:định dạng kiểu dữ liệu (chuẩn MIME )thường là tự xác định

Cơ chế cung cấp Intent cho các component:
  • Một Intent được thông qua đến Context.startActivity() or Activity.startActivityForResult() để khởi động một Activity hoặc sử dụng Activity hiện tại để thực hiện một hành động mới(Nó cũng có thể được truyền cho Activity.setResult() để trả về thông tin cho hoạt động này đó được gọi là startActivityForResult()).
  • Một Intent được thông qua đến Context.startService() để bắt đầu một service hoặc cung cấp chỉ dẫn mới cho một dịch vụ đang hoạt động.
  • Một Intent có thể thông qua đến Context.bindService() để có thể thiết lập kết nối giữa các component gọi điện thoại và service mục tiêu,nó có thể tùy chọn bắt đầu Service nếu nó chưa hoạt động

Intent Resolution:khi các Intent được phát ra Android sẽ tìm cách phù hợp nhất để thực hiện yêu cầu.Quyết định thực thi cái gì dựa trên mức độ mô tả của lời gọi.
  • Explicit Intent:chỉ rõ một Component cụ thể( bằng setComponent(ComponentName) hoặc setClass(Context, Class) ), nó cho biết chính xác lớp nào cần chạy. Đây là cách thông thường mà một ứng dụng bật các activity nội tại của nó khi người dùng tương tác với ứng dụng.
  • Implicit Intent :không chỉ rõ component nào. Tuy nhiên, chúng chứa đủ thông tin để hệ thống xác định các component sẵn có nào là phù hợp nhất để chạy cho intent đó.
  • Cơ chế phân giải Intent(Intent Resolution) về cơ bản là so sánh intent với các mô tả <intent-filter> trong các ứng dụng đã cài trên thiết bị.

No comments:

Post a Comment