原文
用一个简单的例子来看MIDlet的生命周期

用一个简单的例子来看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 状态改变情况:

  用一个简单的例子来看MIDlet的生命周期原文


看看我那个简单的例子
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文public class HelloWorld extends MIDlet ......{
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文    public HelloWorld() ......{ 
用一个简单的例子来看MIDlet的生命周期原文        System.out.println("这个是程序的构造函数,程序运行的时候首先调用这个");
用一个简单的例子来看MIDlet的生命周期原文    }
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文    protected void destroyApp(boolean unconditional)
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文            throws MIDletStateChangeException ......{
用一个简单的例子来看MIDlet的生命周期原文        System.out.println("这个是程序的destroyed事件,当您按下退出时调用");
用一个简单的例子来看MIDlet的生命周期原文    }
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文    protected void pauseApp() ......{
用一个简单的例子来看MIDlet的生命周期原文        System.out.println("这个是程序的pause事件,当您按下暂停的时调用");
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文    }
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文    protected void startApp() throws MIDletStateChangeException ......{
用一个简单的例子来看MIDlet的生命周期原文        System.out.println("这个是程序的active事件,程序启动时候调用");
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文    }
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文}
用一个简单的例子来看MIDlet的生命周期原文

大家可以运行程序中看到这个程序的运行先后顺些。基本上就明白了程序的调用机制了。
现在大家思考下,j2me的MIDlet是怎么样运行的呢?sun在里面进行了什么样子的限制与手脚呢?
一般的应用程序都有个main入门。这里没有,为什么呢?
我想这个就是ASM的作用了,sun在后台做了很多处理,比如包括,启动容器,启动MIDlet相关的资源等等。

用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文public static void main(String args[]) ...{
用一个简单的例子来看MIDlet的生命周期原文        CommandState state = new CommandState();
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文    /**//*
用一个简单的例子来看MIDlet的生命周期原文     * pass resource strings down to the native system menu and
用一个简单的例子来看MIDlet的生命周期原文     * popup choice group methods...
用一个简单的例子来看MIDlet的生命周期原文     */
用一个简单的例子来看MIDlet的生命周期原文    initSystemLabels();
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文        /**//*
用一个简单的例子来看MIDlet的生命周期原文         * We will try to handle any printing at this level, because
用一个简单的例子来看MIDlet的生命周期原文         * displaying JAM command line errors is device specific.
用一个简单的例子来看MIDlet的生命周期原文         */
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文        try ...{
用一个简单的例子来看MIDlet的生命周期原文            initializeInternalSecurity();
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文        /**//* Start a inbound connection watcher thread. */
用一个简单的例子来看MIDlet的生命周期原文        new Thread(new PushRegistryImpl()).start();
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文            restoreCommandState(state);
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文            // handle any development machine only functions at this level
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文            switch (state.nextCommand) ...{
用一个简单的例子来看MIDlet的生命周期原文            case CommandProcessor.RUN_CLASS:
用一个简单的例子来看MIDlet的生命周期原文                runLocalClass(state);
用一个简单的例子来看MIDlet的生命周期原文                state.nextCommand = CommandProcessor.EXIT;
用一个简单的例子来看MIDlet的生命周期原文                break;
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文            case CommandProcessor.MANAGE:
用一个简单的例子来看MIDlet的生命周期原文                manage(state);
用一个简单的例子来看MIDlet的生命周期原文                break;
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文            case CommandProcessor.LIST:
用一个简单的例子来看MIDlet的生命周期原文            case CommandProcessor.STORAGE_NAMES:
用一个简单的例子来看MIDlet的生命周期原文                list(state);
用一个简单的例子来看MIDlet的生命周期原文                state.nextCommand = CommandProcessor.EXIT;
用一个简单的例子来看MIDlet的生命周期原文                break;
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文            case CommandProcessor.REMOVE:
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文                if (DEV_STORAGE_NAME.equals(state.suiteStorageName)) ...{
用一个简单的例子来看MIDlet的生命周期原文                    removeDevStorage(state);
用一个简单的例子来看MIDlet的生命周期原文                    state.nextCommand = CommandProcessor.EXIT;
用一个简单的例子来看MIDlet的生命周期原文                    break;
用一个简单的例子来看MIDlet的生命周期原文                }
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文                // fall through
用一个简单的例子来看MIDlet的生命周期原文            default:
用一个简单的例子来看MIDlet的生命周期原文                CommandProcessor.perform(state);
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文                if (state.status == CommandProcessor.MIDLET_SUITE_NOT_FOUND) ...{
用一个简单的例子来看MIDlet的生命周期原文                    System.out.println("The MIDlet suite was not found.");
用一个简单的例子来看MIDlet的生命周期原文                } else if (state.initialCommand == CommandProcessor.INSTALL &&
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文                        state.status == CommandProcessor.OK) ...{
用一个简单的例子来看MIDlet的生命周期原文                    System.out.println("Storage name: " +
用一个简单的例子来看MIDlet的生命周期原文                                       state.suiteStorageName);
用一个简单的例子来看MIDlet的生命周期原文                }
用一个简单的例子来看MIDlet的生命周期原文            }
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文        } catch (InvalidJadException ije) ...{
用一个简单的例子来看MIDlet的生命周期原文            System.out.println("** Error installing suite (" +
用一个简单的例子来看MIDlet的生命周期原文                               ije.getReason() + "): " + 
用一个简单的例子来看MIDlet的生命周期原文                               messageForInvalidJadException(ije));
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文        } catch (IOException ioe) ...{
用一个简单的例子来看MIDlet的生命周期原文            System.out.println("** Error installing suite: " +
用一个简单的例子来看MIDlet的生命周期原文                               ioe.getMessage());
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文        } catch (ClassNotFoundException ex) ...{
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文            if (state.initialCommand == CommandProcessor.MANAGE) ...{
用一个简单的例子来看MIDlet的生命周期原文
用一个简单的例子来看MIDlet的生命周期原文              state.runExceptionMessage =
用一个简单的例子来看MIDlet的生命周期原文                    Resource.getString("The application cannot be launched. " +
用一个简单的例子来看MIDlet的生命周期原文                    "One of the application classes appears to be missing. " +
用一个简单的例子来看MIDlet的生命周期原文                    "This could be due to a mis-named class. Contact the " +
用一个简单的例子来看MIDlet的生命周期原文                    "application provider to resolve the issue.");
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文            } else ...{
用一个简单的例子来看MIDlet的生命周期原文                System.out.println("MIDlet class(s) not found: " + 
用一个简单的例子来看MIDlet的生命周期原文                                   ex.getMessage());
用一个简单的例子来看MIDlet的生命周期原文            }
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文        } catch (InstantiationException ex) ...{
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文            if (state.initialCommand == CommandProcessor.MANAGE) ...{
用一个简单的例子来看MIDlet的生命周期原文               state.runExceptionMessage = Resource.getString(
用一个简单的例子来看MIDlet的生命周期原文                   "The application cannot be launched. The application " +
用一个简单的例子来看MIDlet的生命周期原文                   "may have done an illegal operation. Contact the " +
用一个简单的例子来看MIDlet的生命周期原文                   "application provider to resolve the issue.") + " " +
用一个简单的例子来看MIDlet的生命周期原文                   ex.getMessage();
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文            } else ...{
用一个简单的例子来看MIDlet的生命周期原文                System.out.println(
用一个简单的例子来看MIDlet的生命周期原文                    "MIDlet instance(s) could not be created: " + 
用一个简单的例子来看MIDlet的生命周期原文                                 ex.getMessage());
用一个简单的例子来看MIDlet的生命周期原文            }
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文        } catch (IllegalAccessException ex) ...{
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文            if (state.initialCommand == CommandProcessor.MANAGE) ...{
用一个简单的例子来看MIDlet的生命周期原文                state.runExceptionMessage = Resource.getString(
用一个简单的例子来看MIDlet的生命周期原文                   "The application cannot be launched. The application " +
用一个简单的例子来看MIDlet的生命周期原文                   "may have done an illegal operation. Contact the " +
用一个简单的例子来看MIDlet的生命周期原文                   "application provider to resolve the issue.") + " " +
用一个简单的例子来看MIDlet的生命周期原文                   ex.getMessage();
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文            } else ...{
用一个简单的例子来看MIDlet的生命周期原文                System.out.println(
用一个简单的例子来看MIDlet的生命周期原文                    "MIDlet class(s) could not be accessed: " + 
用一个简单的例子来看MIDlet的生命周期原文                    ex.getMessage());
用一个简单的例子来看MIDlet的生命周期原文            }
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文        } catch (OutOfMemoryError ex) ...{
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文            if (state.initialCommand == CommandProcessor.MANAGE) ...{
用一个简单的例子来看MIDlet的生命周期原文                state.runExceptionMessage = Resource.getString(
用一个简单的例子来看MIDlet的生命周期原文                    "The application has unexpectedly quit because it ran " +
用一个简单的例子来看MIDlet的生命周期原文                    "out of memory.");
用一个简单的例子来看MIDlet的生命周期原文用一个简单的例子来看MIDlet的生命周期原文            } else ...{
用一个简单的例子来看MIDlet的生命周期原文                System.out.println("The MIDlet has run out of memory");
用一个简单的例子来看MIDlet的生命周期原文   &nb

相关文章:

  • 2021-05-18
  • 2022-12-23
  • 2022-12-23
  • 2021-08-18
  • 2021-11-28
  • 2022-12-23
  • 2021-07-10
  • 2021-05-28
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-01
  • 2021-06-18
  • 2021-09-04
  • 2021-08-27
相关资源
相似解决方案