MIDlet là gì
MIDlet là gì? Mobile Information Device Profile (MIDP) là tập các hàm API dành cho thiết bò thông tin di động. MIDlet là ứng dụng MIDP. Thuật ngữ MIDlet và MID application được sử dụng như nhau. Các MIDlets hình thành nên các khối xây dựng của môi trường thực thi Java 2 Platform, Micro Edition (J2ME).MIDlet được thiết kế để chạy và được điều khiển bởi trình quản lý ứng dụng trong máy ảo K (K Virtual Machine - KVM), một dạng thô thiển nhất của máy ảo Java được thiết kế để chạy trên thiết bò di động. Lớp javax.microedition.midlet.MIDlet hoạt động như là một giao diện (interface) giữ MIDlet và trình quản lý ứng dụng. Các phương thức thuộc lớp này cho phép trình quản lý ứng dụng tạo, bắt đầu, tạm dừng, và hủy MIDletCác ứg dụng J2ME phải kế thừa (extend) lớp javax.microedition.midlet.MIDlet, Lớp này cung cấp một khung làm việc (framework) cho các hoạt động sau:• Cho phép trình quản lý ứng dụng điều khiển MIDlet bằng cách thông báo và yêu cầu thay đổi các trạng thái• Cho phép MIDlet lấy các thuộc tính từ application descriptor, một đăng ký (registry) của các ứng dụng được duy trì bưởi trình quản lý ứng dụngHình sau mô tả sự tương tác giữa MIDle và trình quản lý ứng dụng Vòng đời của MIDlet Lớp chính của một MIDlet kế thừa là lớp javax.microedition.midlet.MIDlet. Lớp chính đònh nghóa ba phương thức hành động trong chu kỳ sống của nó: startApp(), pauseApp(), và destroyApp(). Có ba trạng thái trong vòng đời của một MIDlet:• paused: MIDlet instance đã được tạo song và chưa hoạt động (inactive)• active: MIDlet là hoạt động.• destroyed: MIDlet đã kết thúc và sẵn sàng cho việc tái chế bởi bộ thu gom rác.Chú ý ở đây không có trạng thái nào tương đương với trạng thái loaded của applet, bởi vì ở đây không có phương thức khởi tạo. Thông thường, một MIDlet khởi tạo chính nó ngay lần đầu tiên khi phương thức startApp() được gọi.Hình: các trạng thái của MIDletCác thể hiện MIDlet được tạo bởi AMS, đặc thù trong việc đáp ứng yêu cầu của người sử dụng. Ví dụ, AMS có thể liệt kê tất cả các MIDlet đã được cài vào hệ thống để cho phép người sử dụng lựa chọn. Trạng thái khởi đầu của MIDlet là paused. Giống như applet, một MIDlet phải thực hiện một ít hoặc không làm việc khởi tạo trong constructor củ nó, bởi vì ngữ cảnh hoạt động của nó chưa được thiết lập.Tại một thời điểm sau khi xây dựng, AMS kích hoạt MIDlet và gọi phương thức startApp(). Sau khi thực hiện các việc khởi tạo cần thiết, startApp() tạo và hiển thò giao diện người sử dụng. Sau khi kết thúc phương thức startApp(). Trạng thái của MIDlet chuyển từ paused sang active. Nếu MIDlet không thể khởi tạo chính nó vì một lý do nào đó, nó phải nếm ra một ngoại lệ javax.microedition.midlet.MIDletStateChangeException ngay lập tức nó chuyển đến trạng thái destroyed.Sự làm mất tác dụng (Deactivation) xảy ra trên bất kỳ sự chuyển nào từ trạng thái active đến trạng paused. MIDlet chưa bò hủy, nhưng nó phải giải phóng bất cứ nguồn tài nguyên hệ thống nào có thể được. Nếu deactivation được tạo bởi hệ thống, phương thức pauseApp() được gọi. Nếu MIDlet deactive chính nó, bằng cách sử dụng ngữ cảnh hoạt động của MIDlet, phương thức pauseApp() không được gọi.Sự phá hủy (Destruction) xảy ra khi MIDlet chuyển đến trạng thái destroyed từ trạng thái active hoặc paused. Nếu sự phá hủy được tạo bởi AMS, phương thức destroyApp() được gọi. Một đối số kiểu boolean được truyền cho phương thức này để chỉ ra hoặc là phá hủy vô điều kiện hoặc là tùy ý. MIDlet có thể từ chối phá hủy tùy ý bằng cách nếm ra một ngoại lệ MIDletStateChangeException. Nếu MIDlet phá hủy chính nó phương thức destroyApp() không được gọi.Mã chương trình cho một MIDlet như sau: import javax.microedition.midlet.*;public class BasicMIDlet extends MIDlet { public BasicMIDlet(){ // constructor - don't do much here } protected void destroyApp( boolean unconditional ) throws MIDletStateChangeException { // called when the system destroys the MIDlet } protected void pauseApp(){ // called when the system pauses the MIDlet } protected void startApp() throws MIDletStateChangeException { // called when the system activates the MIDlet }}Môi trường hoạt động MIDletLớp javax.microedition.midlet.MIDlet thường đònh nghóa các phương thức nó cho phép MIDlet tương tác với môi trường hoạt động : getAppProperty() trả về giá trò thuộc tính khởi tạo; resumeRequest() yêu cầu AMS để reactivate MIDlet; notifyPaused() dòch chuyển MIDlet đến trạng thái paused; và notifyDestroyed() dòch chuyển MIDlet đến trạng thái destroyed.Thuộc tính khởi tạo MIDlet là tứng cặp tên-giá trò nằm trong application descriptor hoặc trong manifest của MIDlet. application descriptor là một file text riêng lẽ nó liệt kê thông tin quan trọng về một tập các MIDlet được đóng gói lại thành một file JAR duy nhất (a MIDlet suite). Manifest là một bản kê JAR chuẩn được đóng gói cùng với MIDlet suite. Khi phương thức getAppProperty() được gọi, nó tìm application descriptor trước, sau đó là manifest. (Chú ý trong MIDP 2.0 đưa ra một khái niệm về trusted suite, ở đó getAppProperty() chỉ tìm manifest.)The remaining methods directly affect the MIDlet's life-cycle. A paused MIDlet calls resumeRequest() to be reactivated. An active MIDlet calls notifyPaused() to be deactivated. A paused or active MIDlet calls notifyDestroyed() to be destroyed. Note that resumeRequest() merely asks the AMS to reactivate the MIDlet; the AMS decides whether and when to reactivate the MIDlet. Reactivation invokes the MIDlet's startApp() method. By contrast, notifyPaused() or notifyDestroyed() causes an immediate transition to the new state; as a consequence, neither pauseApp() nor destroyApp() is invoked. Các phương thức còn lại trực tiếp ảnh hưởng đến chu kỳ sống của MIDlet. Trạng thái paused của MIDlet gọi phương thức resumeRequest() để được kích hoạt lại. Trạng thái active của MIDlet gọi phương thức notifyDestroyed() để bò phá hủy. Chú ý rằng phương thức resumeRequest() chỉ yêu cầu AMS kích hoạt lại MIDlet; AMS mới có quyền quyết đònh có hay không cũng như khi nào thì MIDlet được khích hoạt. Sự kích hoạt lại gọi phương thức startApp() của MIDlet. Khác với, notifyPaused() hoặc notifyDestroyed() gây ra một chuyển trạng thái tức thời đến trạng thái mới; hệ quả là hoặc pauseApp() hoặc destroyApp() được gọi. Maừ chửụng trỡnh cho moọt MIDlet nhử sau:import javax.microedition.lcdui.*;import javax.microedition.midlet.*;public class BetterMIDlet extends MIDlet { private Display display; public BetterMIDlet(){ } protected void destroyApp( boolean unconditional ) throws MIDletStateChangeException { exitApp(); // call cleanup code } protected void pauseApp(){ // add pause code here } protected void startApp() throws MIDletStateChangeException { if( display == null ){ initApp(); // perform one-time initialization } // add per-activation code here } private void initApp(){ display = Display.getDisplay( this ); // add initialization code here } public void exitApp(){ // add cleanup code here notifyDestroyed(); // destroys MIDlet }} Xử lý sự kiệnKhi một người sử dụng tương tác với MIDlet, sự kiện sẽ được sản sinh. MIDlet cung cấp một vài interface như một phần của cơ chế xử lý sự kiện sao cho trình ứng dụng có thể được thông báo về các sự kiẹân và đáp ứng lại chúng. Mỗi một interface cung cấp một phương thức được biết như là phương thức callback, Chúng là những lời gọi của các phương thức do người lập trình đònh nghóa chúng được thực thi bởi ứng dụng trong đáp ứng lại sự kiện. Các sự kiện có thể được sinh ra trong khi MIDlet đang chạy bao gồm:• Nhập từ màn hình lệnh (Input from screen commands )• Những thay đổi trạng thái của các item• Những thay đổi trạng thái của cơ sở dữ liệu tương ứng với MIDlet Cơ chế xử lý sự kiện trong MIDlet dựa trên mô hình listener. Mỗi đối tượng cài đặt một listener sao cho nó có thể được thông báo và đáp ứng lại sự kiện. Để đạt được điều này, MIDlet cung cấp ba interface: ItemStateListener, CommandListener, and RecordListener. Nào chúng ta hãy xem mỗi interface một cách chi tiết hơn.CommandListener Một CommandListener đảm nhiệm việc thông báo cho MIDlet về bất kỳ sự kiện nào được sinh ra bởi các thành phần có thể hiển thò (displayable items). Nó cung cấp một phương thức commandAction(Command c, Displayable d) mà đối tượng kế thừa listener phải cài đặt. Phương thức này chỉ ra một sự kiện lệnh (command event )đã xảy ra trên Displayable d.ItemStateListenerAn ItemStateListener is responsible for notifying the MID application of any change in the internal state of a display item (e.g., the value of a TextField on the screen). It provides an itemStateChanged(Item I) method called when the internal state of an item has been changed by the user. The change in internal state can be due to the user:Một ItemStateListener đảm nhiệm việc thông báo cho MIDlet về bất kỳ sự kiện nào được sinh ra bởi trạng thái trong của một thành phần hiển thò (display item) (ví dụ, giá trò trong ô textField trên màn hình). Nó cung cấp một phương thức itemStateChanged(Item i) được gọi khi trạng thái trong của một thành phầ (item) bò thay đổi bởi người sử dụng. Sự thay đổi trạng thái trong có thể do người sử dụng• Thay đổi gía trò các giá trò đã được thiết lập tren một ChoiceGroup• Điều chỉnh giá trò của một Gauge tương tác • Nhập hoặc sửa giá trò của một TextField• Nhập vào ngày mới trong một DateFieldThiết bò phải quyết đònh khi nào nó xem xét một giá trò mới được nhập vào cho một item. Ví dụ, cài đặt của một TextField có thể chỉnh sửa được rất khác nhau giữa các thiết bòMột ItemStateListener sẽ không được gọi nếu ứng dụng tự thay đổi giá trò của một thành phần tương tác (nteractive item), chỉ có người sử dụng mới thực hiện đượcRecordListener RecordListener chòu trách nhiệm nhận các sự kiện liên quan đến mẫu tin (record) từ kho lưu trữ mẫu tin tương ứng với ứng dụng. Để sử dụng nó, trình ứng dụng phải cài đặt các phương thức sau, các phương thức này do RecordListener cung cấp• recordAdded(): Được gọi khi một record được thêm vào kho lưu trữ record(record store).• recordDeleted(): Được gọi sau khi một record bò xóa.• recordChanged():Được gọi sau khi một record bò thay đổi. Kết hợp listener với các đối tượng Các Listener phải được kết hợp với sự kiên để cho các đối tượng này đáp ứng lại sự kiện khi MIDlet thi hành. Các lớp MIDlet cung cấp một vài phương thức để kết hợp một đối tượng lắng nghe sự kiên với một đối tượng• setCommandListener(): Phương thức này thiết lập một đối tượng lắng nghe sự kiện cho mọi command của đối tượng Displayable, thay thế tất cả đối tượng CommandListener trước đây.• setItemStateListener(): Phương thức này thiết lập item state listener cho các thàng phần hiển thò, thay thế các itemStateListener có trước.• addRecordStateListener(): Phương thức này thêm record state listener vào record store. Hình sau cho thấy mô hình xử lý sự kiện MIDlet. Các ngoại lệ MIDletMột MIDlet có khả năng giải quyết các tình huống bất thường thông qua exception handling. Một ngoại lệ (exception) là một sự kiện nó xảy ra trong suốt quá trình thực thi của một chương trình nó phá vỡ luồn sự kiện chuẩn của các chỉ thò lệnh. MIDlet duy trỳ cơ chế xử lý ngoại lệ Java. Khi một lỗi như thế xảy trong một phương thức, phương thức sẽ tạo ra một đối tượng ngoại lệ và nếm nó cho hệ thống thực thi. Đối tượng ngoại lệ (exception) chứa thông tin về ngoại lệ, bao gồm loại ngoại lệ và trạng thái của chương trình khi lỗi xảy ra. Sau hệ thống thực thi chòu trách nhiệm tìm một vài mã nguồn (code) để xử lý lỗi. Trong kỹ thuật Java, việc tạo một đối tượng ngoại lệ và nếm nó cho môi trường thực thi được gọi bởi throwing an exception. Giống như chúng ta đã từng thấy trước đây. MIDlet có thể trải qua các trạng thái khác nhau trong đời sống (lifetime) của nó. MIDlet báo hiệu bằng cách nếm ra một MIDletStateChangeException ẩn để thông báo yêu cầu thay đổi trạng thái MIDlet đã bò thất bại. . MIDlet là gì? Mobile Information Device Profile (MIDP) là tập các hàm API dành cho thiết bò thông tin di động. MIDlet là ứng dụng MIDP. Thuật ngữ MIDlet. và trình quản lý ứng dụng Vòng đời của MIDlet Lớp chính của một MIDlet kế thừa là lớp javax.microedition .midlet. MIDlet. Lớp chính đònh nghóa ba phương