Bài 5.2: Thế nào là xử lý event?
BREW applet thì chỉ có thể chạy được 1 applet một lúc. Tuy nhiên, nếu khởi động nhiều applet, rồi có thể (sử dụng) thay đổi quay vòng. Để thực hiện được, cần dùng chức năng suspend / resume. Người dùng sau khi khởi động applet, nếu thực hiện “suspend”, thì applet sẽ thành trạng thái suspend.
Event APP_EVT_SUSPEND xảy ra trong trường hợp người dùng thực hiện suspend applet. Nếu event handler, trả lại giá trị TRUE đối với event này, thì applet sẽ trở thành trạng thái suspended.
Nếu trả lại giá trị FALSE đối với event APP_EVT_SUSPEND, thì sẽ xảy ra conflict với môi trường chạy BREW. Nếu như thế, môi trường chạy BREW sẽ “nổi giận” và gửi event APP_EVT_STOP. Applet sẽ kết thúc.
Trường hợp trả lại giá trị TRUE, applet sẽ thành trạng thái suspended, khi đó nếu resume lại applet, thì môi trường chạy BREW sẽ nhận event EVT_APP_RESUME. Khi đó, sẽ trở về trạng thái giống như trước lúc thực hiện suspend.

Trường họp trả lại TRUE đối với APP_EVT_SUSPEND event
Trường họp trả lại FALSE đối với APP_EVT_SUSPEND event
Nội dung trên có ghi trong 「BREW SDK ユーザーズガイド / user guide」, hãy tham khảo thêm
Emulate suspend và resume
Có thể thực hiện emulate suspend và resume trên BREW emulate.
Tại trạng thái chạy BREW applet, từ menu chọn [ツール ] (Tool) - [設定] (Setting), dialog [設定] (Setting) hiện thị ra, trên màn hình này có thông báo [ BREW is suspending ] . Đây là trạng thái suspend.
Để resume, thì chỉ cần ấn nút [キャンセル] (Cancel) trên dialog [設定] (Setting)
Key Event
Trong phát triển BREW event được sử dụng nhiều nhất là key event, chủ yếu là 3 loại EVT_KEY, EVT_KEY_PRESSED, EVT_KEY_RELEASED
Khi người dùng ấn key của mobile, event EVT_KEY_PRESS sẽ được thông báo. Tiếp đó, khi thả key ra, EVT_KEY_RELEASE sẽ được thông báo.
Timing mà event EVT_KEY được thông báo tùy thuộc vào từng máy mobile. Tại 「BREW SDK ユーザーズガイド」 (user guide), có ghi như dưới đây.
Tùy thuộc vào sự lựa chọn của nhà sản xuất, event được thông báo khi nhấn key, hay khi thả key, hoặc cả hai.
Parameter của cả 3 loại key event đều có ý nghĩa giống nhau. wParam được trả key code của key, còn dwParam được trả modified key flag.
Key code là hằng số biểu diễn key. Từ index bên trái của 「BREW API リファレンス」 (reference) nếu chọn [キーコード] (key code) thì sẽ thấy danh sách các keycode. Dưới đây là một số trong số đó.
| key code | giải thích |
|---|---|
| AVK_SELECT | select key |
| AVK_CLR | clear key |
| AVK_UP | Up key |
| AVK_DOWN | Down key |
| AVK_LEFT | Left key |
| AVK_RIGHT | Right key |
| AVK_SOFT1 | Soft key 1 |
| AVK_SOFT2 | Soft key 2 |
Key của điện thoại
Modified key flag, là các hằng số bit biểu diễn modified key. Modified key là các key tương tự với [Shift] hay [Ctrl] đối với PC. Trong 「BREW API リファレンス」 (reference) phần [キーコード](key code)- [修飾キーのビット] (bit modified key) có nói về cái này, tuy nhiên trong máy mobile thông thường thì không sử dụng.
Chương trình ví dụ về event handling
Tại đây sẽ giới thiệu một ví dụ sử dụng cả 7 loại event giải thích ở trên. Source code
Khi khởi động chương trình này, một mặt cười màu vàng sẽ hiển thị. Khi select key ở trạng thái bị ấn, mặt cười sẽ chuyển thành mặt giận. Nếu thả select key ra, thì sẽ trở lại mặt cười như cũ.
Phán đoán Select key đang ở trạng thái bị ấn hay không, nằm trong applet structure (NicoApplet). Phần xử lý ghi ra màn hình sẽ tùy vào từng trạng thái sẽ thực hiện vẽ ra màn hình.
Tại application này, applet structure có chứa object IGraphics. IGraphics object có thể tạo ra và hủy trong quá trình vẽ màn hình, tuy nhiên nếu lặp đi lặp lại thì sẽ làm chậm tốc độ xử lý vẽ màn hình. Vì vậy, tại xử lý event EVT_APP_START sẽ tạo IGraphics object, và giữ objet này trong suốt quá trình vẽ màn hình. Tiếp đó, khi xử lý event EVT_APP_STOP, sẽ thực hiện hủy object này. Technique như này, nhất định sẽ phải xử dụng trong game tốc độ nhanh.
Ngoài ra, trong application lần này, thực hiện xử lý đối với event EVT_APP_RESUME, tiến hành vẽ lại màn hình mỗi khi resume. Khi BREW application thành trạng thái suspend, vì sẽ hiển thị màn hình khác, vì vậy ngay sau khi resume thì caafn phải hiển thị lại màn hình như cũ.
Tại event EVT_APP_SUSPEND, sẽ giải tỏa trạng thái Select key được ấn. Nếu chương trình bị suspend ở trạng thái Select key bị ấn, thì sẽ xảy ra điều gì ? Thực tế tuy không phải là trạng thái Select key đang bị ấn, nhưng ở (xử lý) bên trong thì flag biểu hiễn trạng thái bị ấn vẫn “giương lên”, nên khi resume, sẽ mặt giận sẽ hiển thị.
Những xử lý chi tiết khi suspend / resume như trên, thực tế trong phát triển application sẽ rất cần thiết.
Dạo này hơi bận nên từ thời gian ra lò bào 5.2 này đến bài 5.1 hơi lâu. Mọi người thông cảm!
Tags: Brew








lexa Ranking:
[...] Bài 5.2: Thế nào là xử lý event? [...]
Gửi nhận xét: