Pham_loi
Chức vụ: 14:16:09, 24-05-2016 |
Trong bài trước bạn đã tìm hiểu những khái niệm, thuật ngữ cơ bản nhất trong lập trình J2ME trên điện thoại di động và bạn cũng đã nắm được ý nghĩa các đoạn mã nguồn trong ứng dụng HelloWorld. Trong bài viết này tôi sẽ tiếp tục trình bày chu kỳ sống của một ứng dụng J2ME bất kỳ, đây là một kiến thức nền tảng và hết sức quan trọng khi khi xây dựng ứng dụng J2ME của riêng bạn.
Chắc bạn cũng còn nhớ trong mã nguồn ứng dụng HelloWorld có 3 phương thức là startApp(), pauseApp() và destroyApp(). Đây là 3 phương thức trừu tượng được định nghĩa trong lớp trừu tượng MIDlet mà bất kỳ ứng dụng nào cũng phải định nghĩa và cung cấp phần xử lý cho 3 phương thức này. Để có thể lập trình tốt trên ĐTDĐ thì các bạn cần nắm vững chu kỳ sống và cách hoạt động của các MIDlet.
Các thiết bị di động cho dù là các chương trình giả lập (như bộ công cụ Sun Wireless Toolkit) hay các điện thoại thật đều tương tác với các ứng dụng MIDlet của bạn thông qua một phần mềm của chính thiết bị đó và thường được gọi là Phần mềm quản lý các ứng dụng MIDlet (gọi tắt là PMQLƯD). PMQLƯD này chịu tránh nhiệm khởi tạo, kích hoạt, tạm dừng, chạy lại và kết thúc ứng dụng MIDlet. Ngoài những chức năng này thì PMQLƯD còn chịu trách nhiệm cài đặt và gỡ bỏ MIDlet của bạn. Một MIDlet của bạn sẽ ở một trong 3 trạng thái là kích hoạt (active), tạm dừng (paused) hay kết thúc (destroyed) và được quản lý thông qua 3 phương thức startApp(), pauseApp() và destroyApp().
Khi ở trạng thái tạm dừng, ứng dụng MIDlet sẽ đợi chuyển sang trạng thái kích hoạt. Khi ở trạng thái này thì ứng dụng của bạn nên giải phóng bớt các tài nguyên hệ thống. Khi khởi động chương trình thì ứng dụng của bạn sẽ ở trạng thái tạm dừng này trước khi chuyển sang trạng thái kích hoạt. Đôi khi ứng dụng của bạn phải chuyển sang trạng thái tạm dừng để thiết bị xử lý một số chức năng nào đó, ví dụ như việc nhận một cuộc điện thoại gọi tới. Để chuyển ứng dụng sang trạng thái tạm dừng thì PMQLƯD sẽ gọi phương thức pauseApp(). Ngoài ra nếu bạn muốn tạm dừng ứng dụng của bạn, bạn có thể gọi phương thức notifyPaused(). Một cách cuối để chuyển sang trạng thái tạm dừng này là khi phương thức startApp() được gọi nhưng lại ném ra một lỗi ngoại lệ là MIDletStateChangeException.
Khi ứng dụng chuyển sang trạng thái kích hoạt, nó có thể thực hiện các chức năng của nó, sử dụng các tài nguyên bộ nhớ và khả năng xử lý của thiết bị. Một ứng dụng chuyển sang trạng thái kích hoạt khi PMQLƯD gọi phương thức startApp() khi ứng dụng đang ở trạng thái tạm dừng. Nếu ứng dụng của bạn đang ở trạng thái tạm dừng và bạn muốn chuyển sang trạng thái kích hoạt, bạn có thể gọi phương thức resumeRequest(). PMQLƯD có thể bỏ qua yêu cầu này hoặc đưa vào hàng đợi nếu có nhiều ứng dụng cùng yêu cầu được chuyển sang trạng thái kích hoạt.
Một ứng dụng sẽ chuyển sang trạng thái kết thúc khi phương thức destroyApp(boolean unconditional) được gọi thành công khi ứng dụng đang ở trạng thái kích hoạt hay tạm dừng. Khi PMQLƯD muốn kết thức ứng dụng MIDlet, nó sẽ gọi phương thức này để ứng dụng có thể lưu các thông số trạng thái và giải phóng tài nguyên hệ thống. Bạn có thể chuyển ứng dụng của bạn sang trạng thái kết thúc bằng cách gọi phương thức notifyDestroyed(), bạn chú ý là trước khi gọi phương thức này thì ứng dụng của bạn cần giải phóng tất cả tài nguyên vì phương thức destroyApp(boolean unconditional) sẽ không được gọi.
Vậy chuyện gì sẽ xảy ra khi ứng dụng của bạn đang xử lý một thao tác quan trọng nào đó và phương thức destroyApp(boolean unconditional) được gọi? Điều này tuỳ thuộc vào giá trị của biến unconditional truyền vào. Nếu biến này có giá trị là true (đúng) thì ứng dụng của bạn sẽ chắc chắn bị kết thúc mà PMQLƯD không cần biết ứng dụng của bạn đang làm gì. Tuy nhiên nếu biến unconditional này có giá trị false (sai) thì có nghĩa là PMQLƯD muốn kết thúc ứng dụng của bạn, nhưng nếu ứng dụng của bạn đang xử lý một công việc quan trọng, bạn có thể ném ra ngoại lệ MIDletStateChangeException để thông báo PMQLƯD rằng ứng dụng chưa muốn kết thúc. Tuy nhiên việc này cũng có thể tuỳ thuộc vào đời điện thoại cụ thể, ví dụ như có thể PMQLƯD vẫn kết thúc ứng dụng hoặc nó sẽ gọi destroyApp(boolean unconditional) sau đó. Các bạn cũng chú ý là khi ứng dụng chuyển sang trạng thái kết thúc có nghĩa là ứng dụng sẽ được giải phóng khỏi bộ nhớ nhưng ứng dụng vẫn nằm trong ĐTDĐ và bạn vẫn có thể tiếp tục chạy nó những lần sau (trừ khi bạn gỡ bỏ ứng dụng của bạn ra khỏi ĐTDĐ)
Tóm tắt
Như vậy qua bài viết này các bạn đã nắm được những kiến thức hết sức quan trọng về chu kỳ sống của các ứng dụng, 3 trạng thái tạm dừng, kích hoạt, kết thúc của bất kỳ ứng dụng nào và các phương thức được gọi khi chuyển ứng dụng từ trạng thái này sang trạng thái khác. Trong bài sau tôi sẽ hướng dẫn bạn những cách đưa ứng dụng của bạn vào thiết bị thật để bạn có thể kiểm nghiệm thực tế thành quả “vọc” của bạn trong một tháng vừa qua.
Nguồn: https://sites.google.com/site/360oit/java/tim-hieu-chu-ky-song-cua-mot-ung-dung-j2me
Chỉnh sửa lúc 2016-05-27 01:54 bởi Pham_loi
: 0 ♥