Bài 5.1: Xử lý Event
Trong bài này, tôi xin viết về cách xử lý Event trong BREW.
Event handler
Như xuất hiện nhiều lần trong các bài trước, khi user khởi động applet, ấn nút của máy mobile, môi trường chạy BREW gọi event handler. Protype của event handler như dưới đây.
boolean EventHandler
(
IApplet* pApplet, // applet structure
AEEEvent evt, // event code
uint16 wParam, // event parameter (16 bit)
uint32 dwParam // event parameter (32 bit)
);
* Giải thích của prototype này, có trong mụcAEEHANDLER hay mục IAPPLET_HandleEvent của 「BREW API reference」 .
Đối với parameter pApplet thì có kiểu là IApplet* hay AEEApplet*, hoặc là pointer của customized applet structure. Thực tế để quyết định đưa giá trị nào cho parameter này, phụ thuộc vào việc đã tạo ra applet structure nào trong hàm AEEClsCreateInstance(). Về vấn đề này đã có giải thích trong Lesson 3, ai chưa hiểu đề nghị xem lại.
Tiếp theo, parameter evt là hằng số biểu diễn loại của event được thông báo. Cái này gọi là “event code”. Ví dụ, trường hợp event là [ user đã ấn nút điện thoại ] , thì code EVT_KEY sẽ được trao cho parameter này. Về các event code được định nghĩa trong BREW, sẽ giải thích cụ thể sau.
Parameter wParam và dwParam được gọi là “event parameter”, chứa các thông tin của riêng event, với ý nghĩa như vậy các parameter này khác với event code. Ví dụ, trường hợp event là [ user đã ấn nút điện thoại ] , thì hằng số biểu diễn nút được ấn sẽ được trao cho wParam.
Không được thực hiện xử lý kéo dài với event handler
Điều phải chú ý khi viết event handler đó là không được viết các xử lý mất nhiều thời gian. Đối với một event, nếu việc xử lý kéo dài, thì môi trường chạy BREW sẽ thực hiện cưỡng chế tắt đối với applet. Đây là để bảo vệ chức năng của máy điện thoại không bị “cứng” máy.
Thực tế thời gian quy định dài nhất có thể thì phụ thuộc vào từng máy, tuy nhiên nên vào khoảng 1 giây.
Nếu như vậy, các xử lý mất thời gian như là đọc và ghi file system, hay truyền tin network thfi phải tiến hành như thế nào ? Có một số cách như sau.
* Sử dụng timer hay user customized event, chia xử lý nhiều thời gian thành nhiều xử lý nhỏ
* Sử dụng non-synchronized function.
Đây là những vấn đề cao cấp, trong các lesson này sẽ không đề cập
Tài liệu liên quan:”Lesson 11 TCP / IP network programming”
Các event định nghĩa tại BREW
Thử tìm hiểu danh sách các event của BREW. Mở 「BREW API reference」, từ index bên trái, chọn [データ型] (kiểu dữ liệu) - [eventコード] (event code)
Một cách khác để tìm hiểu event code là mởi file inc\AEE.h trong folder install BREW SDK tìm phần “AEE Events” . Tại đây có danh sách event code. (Tương tự như vậy, việc tìm hiểu các file header rất có ích trong tìm hiểu BREW SDK. Có cả những thông tin không có ghi trong document.)
Dưới đây là các event chính của BREW
| event code | giải thích |
|---|---|
| EVT_APP_START | BREW application được khởi động |
| EVT_APP_STOP | user tắt BREW application |
| EVT_APP_SUSPEND | dừng (pauss) BREW application |
| EVT_APP_RESUME | resume lại BREW applet đang bị paused |
| EVT_KEY | user ấn một nút nào đó |
| EVT_KEY_PRESS | user ấn một key nào đó |
| EVT_KEY_RELEASE | user đã bỏ một key nào đó |
| EVT_CHAR | user đã ấn một character key nào đó |
| EVT_USER | đã phát sinh user defined event |
event khởi động applet
Khi applet bắt đầu chạy, event code EVT_APP_START được thông báo. Trường hợp muốn thực hiện initialize applet, thì có thể thực hiện tại đây.
Đối với event parameter, tại 「BREW API reference」 có viết là 「wParam=0、dwParam = const char* (引数/parameter)」, tuy nhiên đây là sai.
Thực tế, wParam của EVT_APP_START event được trao giá trị 0, dwParam được trao AEEAppStart*. AEEAppStart là structure như sau.
typedef struct _AEEAppStart
{
int error; // trả lại error khởi động
AEECLSID clsApp; // appleID
IDisplay * pDisplay; // IDisplay object
AEERect rc; // vùng (hiển thị) hình chữ nhật của aplet
const char * pszArgs; // parameter được trao cho applet
} AEEAppStart;
Structure này, rất quan trọng khi được khởi động từ BREW applet khác. Nếu không có liên kết giữa các applet, thì chắc sẽ không sử dụng.
event kết thúc applet
Khi kết thúc applet, event code EVT_APP_STOP được thông báo. Trường hợp muốn thực hiện xử lý kết thúc đối với applet , có thể thực hiện tại đây. Về event parameter, tại 「BREW API reference」 có ghi như sau.
wParam = 0、dwParam = boolean *
(flag chỉ định application kết thúc bây giờ, hoặc sau đó. Default là bây giờ )
dwParam là giá trị mà handler xử lý event sẽ trả về cho môi trường chạy BREW. Bằng cách trả lại FALSE cho pointer này, thì dù có nhận event EVT_APP_STOP, thì có thể yêu cầu [ xin đừng kết thúc ], tuy nhiên thông thường không sử dụng parameter này.
(Còn tiếp…)
Tags: Brew








lexa Ranking:
Gửi nhận xét: