安徽新华电脑专修学院_安徽电脑培训_安徽电脑培训学校_合肥电脑培训

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > 用一個簡單的例子來看MIDlet的生命周期原文

用一個簡單的例子來看MIDlet的生命周期原文
2010-01-13 23:30:05  作者:  來源:

用一個簡單的例子來看MIDlet 的生命周期

想來估計也沒有比網上教程說的更清楚了,我這里摘錄的只是文字,從www.j2medev.com來獲取,更詳細的資料可以到www.j2medev.com上查看。我將會以一個例子跟查看官方的源代碼來分析它們。

理解J2ME 的體系結構并不像想象的那么容易,我們覺得讀更多的資料幫助也不大,我們

直接邁向J2ME 開發也許會對你理解J2ME 平臺體系結構這個重要的概念有所幫助。在MIDP

中定義了一種新的應用程序模型MIDlet,它是被Application Management Software(AMS)管理

的。AMS 負責MIDlet 的安裝、下載、運行和刪除等操作。在被AMS 管理的同時,MIDlet 可

以和應用管理軟件通信通知應用管理軟件自己狀態的變化,通常是通過方法notifyDestroyed()

和notifyPaused()實現的

MIDlet 有三個狀態,分別是pause、active 和destroyed。在啟動一個MIDlet 的時候,應用

管理軟件會首先創建一個MIDlet 實例并使得他處于pause 狀態,當startApp()方法被調用的時候

MIDlet 進入active 狀態,也就是所說的運行狀態。在active 狀態調用destroyApp(boolean

第1 章 J2ME 技術概述

4

unconditional)或者pauseApp()方法可以使得MIDlet 進入destroyed 或者pause 狀態。值得一提的

是destroyApp(boolean unconditional)方法,事實上,當destroyApp()方法被調用的時候,AMS 通

知MIDlet 進入destroyed 狀態。在destroyed 狀態的MIDlet 必須釋放了所有的資源,并且保存了

數據。如果unconditional 為false 的時候, MIDlet 可以在接到通知后拋出

MIDletStateChangeException 而保持在當前狀態,如果設置為true 的話,則必須立即進入destroyed

狀態。下圖說明了MIDlet 狀態改變情況:

<!--[if !vml]--><!--[endif]-->

 


看看我那個簡單的例子
public class HelloWorld extends MIDlet ......{

    public HelloWorld() ......{ 
        System.out.println("這個是程序的構造函數,程序運行的時候首先調用這個");
    }

    protected void destroyApp(boolean unconditional)
            throws MIDletStateChangeException ......{
        System.out.println("這個是程序的destroyed事件,當您按下退出時調用");
    }

    protected void pauseApp() ......{
        System.out.println("這個是程序的pause事件,當您按下暫停的時調用");

    }

    protected void startApp() throws MIDletStateChangeException ......{
        System.out.println("這個是程序的active事件,程序啟動時候調用");

    }

}

大家可以運行程序中看到這個程序的運行先后順些;旧暇兔靼琢顺绦虻恼{用機制了。
現在大家思考下,j2me的MIDlet是怎么樣運行的呢?sun在里面進行了什么樣子的限制與手腳呢?
一般的應用程序都有個main入門。這里沒有,為什么呢?
我想這個就是ASM的作用了,sun在后臺做了很多處理,比如包括,啟動容器,啟動MIDlet相關的資源等等。

public static void main(String args[]) ...{
        CommandState state = new CommandState();

    /**//*
     * pass resource strings down to the native system menu and
     * popup choice group methods...
     */
    initSystemLabels();

        /**//*
         * We will try to handle any printing at this level, because
         * displaying JAM command line errors is device specific.
         */
        try ...{
            initializeInternalSecurity();

        /**//* Start a inbound connection watcher thread. */
        new Thread(new PushRegistryImpl()).start();

            restoreCommandState(state);

            // handle any development machine only functions at this level
            switch (state.nextCommand) ...{
            case CommandProcessor.RUN_CLASS:
                runLocalClass(state);
                state.nextCommand = CommandProcessor.EXIT;
                break;

            case CommandProcessor.MANAGE:
                manage(state);
                break;

            case CommandProcessor.LIST:
            case CommandProcessor.STORAGE_NAMES:
                list(state);
                state.nextCommand = CommandProcessor.EXIT;
                break;

            case CommandProcessor.REMOVE:
                if (DEV_STORAGE_NAME.equals(state.suiteStorageName)) ...{
                    removeDevStorage(state);
                    state.nextCommand = CommandProcessor.EXIT;
                    break;
                }

                // fall through
            default:
                CommandProcessor.perform(state);
                if (state.status == CommandProcessor.MIDLET_SUITE_NOT_FOUND) ...{
                    System.out.println("The MIDlet suite was not found.");
                } else if (state.initialCommand == CommandProcessor.INSTALL &&
                        state.status == CommandProcessor.OK) ...{
                    System.out.println("Storage name: " +
                                       state.suiteStorageName);
                }
            }
        } catch (InvalidJadException ije) ...{
            System.out.println("** Error installing suite (" +
                               ije.getReason() + "): " + 
                               messageForInvalidJadException(ije));
        } catch (IOException ioe) ...{
            System.out.println("** Error installing suite: " +
                               ioe.getMessage());
        } catch (ClassNotFoundException ex) ...{
            if (state.initialCommand == CommandProcessor.MANAGE) ...{

              state.runExceptionMessage =
                    Resource.getString("The application cannot be launched. " +
                    "One of the application classes appears to be missing. " +
                    "This could be due to a mis-named class. Contact the " +
                    "application provider to resolve the issue.");
            } else ...{
                System.out.println("MIDlet class(s) not found: " + 
                                   ex.getMessage());
            }
        } catch (InstantiationException ex) ...{
            if (state.initialCommand == CommandProcessor.MANAGE) ...{
               state.runExceptionMessage = Resource.getString(
                   "The application cannot be launched. The application " +
                   "may have done an illegal operation. Contact the " +
                   "application provider to resolve the issue.") + " " +
                   ex.getMessage();
            } else ...{
                System.out.println(
                    "MIDlet instance(s) could not be created: " + 
                                 ex.getMessage());
            }
        } catch (IllegalAccessException ex) ...{
            if (state.initialCommand == CommandProcessor.MANAGE) ...{
                state.runExceptionMessage = Resource.getString(
                   "The application cannot be launched. The application " +
                   "may have done an illegal operation. Contact the " +
                   "application provider to resolve the issue.") + " " +
                   ex.getMessage();
            } else ...{
                System.out.println(
                    "MIDlet class(s) could not be accessed: " + 
                    ex.getMessage());
            }
        } catch (OutOfMemoryError ex) ...{
            if (state.initialCommand == CommandProcessor.MANAGE) ...{
                state.runExceptionMessage = Resource.getString(
                    "The application has unexpectedly quit because it ran " +
                    "out of memory.");
            } else ...{
                System.out.println("The MIDlet has run out of memory");
   &nb

安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
主站蜘蛛池模板: 网咖网址导航,网咖分类目录,网址目录,免费收录国内外、各行业优秀网站网站。 | 墨子百科-专业有趣的问题小百科 莫非传媒官网-江西知名的网络营销推广服务平台南昌网络公司,专业网络公关,品牌危机处理,网站SEO优化,微信朋友圈广告,网站建设,南昌莫非文化传媒有限公司 | 浙江创洁卫生消杀有限公司-浙江杀虫公司,温州消杀公司,温州灭鼠公司,灭蟑螂,灭蚊蝇,灭跳蚤,灭书虱,灭臭虫,灭螨虫,白蚁防治,房间消毒除味等专业服务 | 长沙广告设计公司|长沙广告制作|湖南户外广告制作|商业美陈就找湖南盛翔文化传媒有限公司老品牌高品质 | 深圳-广州-惠州-东莞-重型货架-悬臂-轻中型货架-深圳市诺普泰仓储设备有限公司 | 五金冲压厂家_五金冲压件加工_微细孔加工-深圳市浩鑫精密五金制品有限公司 | 耐压测试仪(检测电气设备绝缘性能)百科 | 上海叶拓科技有限公司 | 中国水泥协会-官方网站| 全国重点实验室--人民网| 襄阳燃烧器厂家-低氮燃烧器价格-河北五通道燃烧器就找襄阳市胜合燃力设备有限公司一站式服务 | 自动_链条式_电动推杆_电动开窗器厂家_山东鑫宏玺智能科技有限公司 | 气体检测仪,多功能气体检测仪,四合一检测仪,氯气检测仪,有机挥发气体检测仪,气体报警器-南京诺邦电子科技有限公司 | 重庆监控安装_监控系统工程_高清监控摄像头-重庆监控系统安装公司 | 数造云-面向3D打印的云制造平台 数控落地镗铣床_数控刨台式镗铣床_数控龙门加工中心-青岛辉腾机械设备有限公司 | 水泥纤维瓦机 石棉瓦机 硅酸钙板生产线 | 苏州不锈钢_江苏不锈钢_江苏不锈钢板_苏州模具钢_苏州合金钢_苏州特种合金_苏州不锈钢板_304不锈钢棒_苏州塞硒五金制品有限公司 苏州ERP定制|苏州CRM|苏州OA|苏州BPM|进销存管理系统-苏州中尚信息科技有限公司 | 河北安润防腐管业股份有限公司-远程供液管路_远距离供液管路_远程供液系统 | 气体检测仪,多功能气体检测仪,四合一检测仪,氯气检测仪,有机挥发气体检测仪,气体报警器-南京诺邦电子科技有限公司 | 纠偏系统厂家-迈欣机械| 潍坊志扬机械有限公司_扫地机-抓蔗机-履带运输机-自上料搅拌车 | 唐山自粘防水|沥青防水涂料信息|压膜防水卷材报价-德生防水股份有限公司 | 深圳PCB电路板厂|PCB线路板厂|FPC柔性电路板厂|FPC软性线路板生产厂家|恒成和电路板:18681495413 | 硝酸铵钙|山西硝酸钙|硝酸钾|太原硝酸钙镁|硝酸钾钙|亚硝酸钠-山西玉彤化工有限公司 | 兰州环氧地坪,兰州防火涂料-甘肃皓天环氧地坪工程 | 皮带清扫器-皮带聚氨酯合金空段输送带清扫器刮刀厂家-衡水格锐特机械科技有限公司 | 啤酒厂家_啤酒代工厂_原浆啤酒厂家 - 山东十谷啤酒有限公司 | 健力普医疗-半导体激光治疗仪,红外偏振光治疗仪,近红外线治疗仪-独家功能,光疗典范 | 智能化解决方案 智能家居 家庭影院 灯光音箱 会议室报告厅 剧场剧院 指挥中心 大数据中心_沈阳天哲科技有限公司 | 免费照片视频制作软件_照片做成视频的软件_制作照片视频的软件 - 万彩影像大师官网 | 英格索兰隔膜泵_ARO气动隔膜泵_英格索兰隔膜泵配件【原厂正品】连续五年无投诉_英格索兰隔膜泵代理-苏州瑞晟茂环保设备有限公司 印刷公司,北京印刷厂,宣传画册手册印刷厂-和智印彩页设计 | 免费照片视频制作软件_照片做成视频的软件_制作照片视频的软件 - 万彩影像大师官网 | 提供技术支持-TXC晶振-晶振厂家-32.768K,石英晶体振荡器厂家销售-NDK振荡器正规代理商 | 日本国际高中_上海日本国际高中学校排名_日本国际高中留学课程_上海日语国际高中学校学费-上海工程技术大学国际多语种特色高中课程【官网】 | 陕西硅酸钙板厂家_西安水泥压力板-陕西凯盛达建材科技有限公司 | 小型静音无油空压机价格-医用无油制氧空气压缩机-浙江盛源水润滑空压机制造有限公司 | 上海外资代理记账|上海软银财务咨询有限公司 | 银泰洁净--净化工程总承包,20年精耕细作,专为净化而来_银泰洁净--净化工程总承包,20年精耕细作,专为净化而来 | 郑州试驾场地_双超专业汽车试驾场地_郑州双超文化传播有限公司官方网站 | 微孔板恒温振荡器-超声波探伤试块-微孔板迷你离心机-南京互川电子有限公司 | 智能一体化蒸馏仪_氨氮蒸馏仪_全自动智能蒸馏仪器厂家-那艾 |