首页 > 转 深入理解Midlet类

转 深入理解Midlet类

在J2ME编程过程中,MIDlet是最核心的类之一,熟悉该类的使用是J2ME学习过程中必须首先掌握的类,下面就结合实际介绍一下该类的实际使用。

       众所周知,J2ME程序都是从MIDlet类开始执行,系统规定了MIDlet的生命周期。规定MIDlet程序有三种状态:

1、  暂停状态

2、  运行状态

3、  销毁状态

系统在执行MIDlet程序时,首先构造一个MIDlet类型的对象,然后使程序进入到暂停状态,按照生命周期的规定,系统会自动调用MIDlet对象的startApp方法使程序进入到运行状态,开始程序的执行。如果在创建MIDlet对象的过程中,或者是调用startApp的方法中发生了异常,则系统会自动调用MIDlet对象的destroyApp方法进行到销毁状态,也就是使程序退出。

所以生命周期中的第一个需要注意的地方就是熟悉在以上状态转换过程中,系统会自动调用的方法,然后在实际编写MIDlet类的时候,在这些方法中书写合适的代码,这样就可以在系统规定的状态转换时,自动调用这些方法。

另外一个需要说明的状态是暂停状态,系统在程序运行过程中,如果手机有来电,则系统会自动的使MIDlet程序进行到暂停状态,在进入到暂停状态以前,系统会自动调用MIDlet对象的pauseApp方法。当电话接听完毕以后,系统会自动使MIDlet程序进行到运行状态,在进入到运行状态以前,系统还会自动调用startApp方法使系统进入到运行状态。

对于上面的内容做一个简单的总结:

1、  startApp方法

在系统第一次运行的时候,系统会自动调用该方法使系统进入到运行状态。

当系统从暂停状态切换到运行状态以前,系统也会自动调用该方法。

 

2、  pauseApp方法

当系统从运行状态切换到暂停状态以前,会自动调用该方法。

3、  destroyApp方法

当系统发生异常退出程序以前,会自动调用该方法。该方法有一个boolean类型的参数,如果该参数为true则代表该方法必须清理和释放资源,如果为false可以抛出一个MIDletStateChangeException异常来表明它不想立即退出。

       熟悉了这几个方法的使用以后,可以实现很多实用的功能,下面介绍两个实际功能的实现:

1、  实现来电话时暂停的功能

在实际的MIDlet编程中,必须实现手机来电时暂停程序的功能,如果有线程时,还需要把线程停止掉,然后当电话结束以后,重新显示界面,并重新启动线程。

startApp方法的具体的实现代码框架如下:

public void startApp(){

        //获得当前显示的界面

        Displayable curr = display.getCurrent();

        //判断是否是第一次运行

        if(curr == null){

               //显示第一个界面,例如logo界面

 

        }else{

               //显示来电以前的界面

               display.setCurrent(curr);

               //如果需要,还可以启动线程

        }

}

如果游戏界面中有线程,则需要在来电时暂停线程,而pauseApp在暂停以前会被系统调用,所以可以在pauseApp方法中实现该功能。pauseApp方法的实现代码框架如下:

        public void pauseApp(){

               //获得当前显示的界面

                      Displayable curr = display.getCurrent();

                      //判断是否是游戏界面

                      if(curr instanceof GameCanvas){

                             //停止线程

                      }

        }

2、  实现按挂机时清理的功能

熟悉MIDlet编程的人都知道,在程序运行过程中按挂机键,可以使MIDlet程序退出,在低级用户界面编程中,可以在keyPressed方法中捕获该事件,但是却无法处理,因为捕获以后,程序就直接退出了。

如果游戏中有背景音乐等,则当按挂机键直接退出的时候,音乐还会存在,这样就会造成很多的问题。但是按挂机键以后,在程序退出以前,系统会自动调用destroyApp方法,所以可以把最后处理的代码放置在destroyApp方法中。

      

       下面接着来看一下另一组方法,来继续熟悉MIDlet类的使用:

1、  notifyPaused

使程序进入暂停状态

2、  notifyDestroyed

是程序进入到销毁状态。

       以上两个方法和上面的三个方法不同,上面的三个方法是在状态切换过程中,会自动被系统调用。而这两个方法不会被系统自动调用,但是程序员在实际编程过程中可以手动调用这两个方法,使程序进入指定的状态。

       比如如果想实现程序退出的功能,就只需要使MIDlet程序进入到销毁状态即可,也就是只需要手动调用notifyDestroyed方法即可。

       上面是MIDlet类中最主要的两组方法,下面分MIDP1.0和MIDP2.0来分别介绍剩下的方法的作用。首先看一下MIDP1.0中的两个方法:

1、  getAppProperty

获得jad文件和manifest文件中属性的值,如果一个属性在以上两个文件中都包含,则以jad文件中的属性值为准。

2、  resumeRequest

系统通过调用该软件来判断是否需要使该MIDlet进入运行状态。如果需要进入运行状态,则系统会自动调用startApp方法。

       在MIDP2.0中,MIDlet类中新增了两个方法,下面介绍一下这两个方法的作用,依次是:

1、  checkPermission

该方法是MIDP2.0的安全许可机制,在程序的实际使用过程中,可以通过该方法来检查MIDlet是否允许特定的操作,例如联网、发送短信息等等。

如果不允许该操作则返回0,允许返回1,未定义则返回-1。

 

2、  platformRequest

使用该方法可以访问某些系统功能,例如通用的功能主要有两种

使系统打开浏览器访问某个特定的网址:

        platformRequest(“http://wap.sina.com.cn”);

这个功能可以实现用来实现提示用户下载新的程序版本等功能。

使手机拨打特定的电话号码:

        paltformRequest(“tel:1860”);

        则系统会自动利用手机来拨打1860。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sergeycao/archive/2009/01/17/3811473.aspx

转载于:https://www.cnblogs.com/fyq6891/archive/2011/06/09/2075975.html

更多相关:

  • 来源:公众号|计算机视觉工坊(系投稿)作者:仲夏夜之星「3D视觉工坊」技术交流群已经成立,目前大约有12000人,方向主要涉及3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、...

  • 点云PCL免费知识星球,点云论文速读。文章:Real-Time LIDAR-Based Urban Road and Sidewalk Detection for Autonomous Vehicles作者:Ern˝o Horváth  , Claudiu Pozna ,and Miklós Unger编译:点云PCL代码:http...

  • 文章:Semantic Histogram Based Graph Matching for Real-Time Multi-Robot Global Localization in Large Scale Environment作者:Xiyue Guo, Junjie Hu, Junfeng Chen, Fuqin Deng, T...

  • 点云PCL免费知识星球,点云论文速读。文章:Robust Place Recognition using an Imaging Lidar作者:Tixiao Shan, Brendan Englot, Fabio Duarte, Carlo Ratti, and Daniela Rus编译:点云PCL(ICRA 2021)开源代码:...

  • 文章:A Survey of Calibration Methods for Optical See-Through Head-Mounted Displays作者:Jens Grubert , Yuta Itoh, Kenneth Moser编译:点云PCL本文仅做学术分享,如有侵权,请联系删除。欢迎各位加入免费知识星球,获取PD...

  • 关于如何在有噪声的数据中进行状态估计的问题的理解,状态估计的问题是指在运动和观测方程中,通常假设两个噪声ωiomega_i和υk,jupsilon_{k,j}满足零均值的高斯分布, xk=f(xk−1,uk)+ωkx_k=f(x_{k-1},u_k)+omega_k其中ωk→N(0,Rk)omega_k ightarro...

  • 强化学习(英语:Reinforcement learning,简称RL)是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益。其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。这个方法具有普适性,因此在其他许多领域都有研究,例如博弈...

  • 文章目录PG 的状态机和peering过程1. PG 状态机变化的时机2. pg的状态演化过程3. pg状态变化实例讲解3.1 pg状态的管理结构3.2 数据的pg状态变化过程3.2.1 NULL -> initial3.2.2 initial -> reset -> Started3.2.3 Started(start) ->St...

  • 什么是状态模式? 定义:将事物内部的每个状态分别封装成类,内部状态改变会产生不同行为。 主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。 何时使用:代码中包含大量与对象状态有关的条件语句。 如何解决:将各种具体的状态类抽象出来。 应用实例: 1、打篮球的时候运动员可以有正常状态、不正常状态和超...

  • 别小看这个功能, 感觉在写一些技术 Blog 的情况下还是挺有用的.   打开QQ拼音: 输入法设置->基本设置->初始状态->中文状态下使用英文标点.  转载于:https://www.cnblogs.com/qrlozte/p/4904087.html...

  • 文章:GVINS: Tightly Coupled GNSS-Visual-Inertial Fusion for Smooth and Consistent State Estimation作者:Shaozu Cao, Xiuyuan Lu, and Shaojie Shen代码:https://github.com/HKUST-...

  • 数据存储系统的经典书籍: 从数据系统的特性开始,先讲单机存储引擎 再到 分布式存储系统,最后到一些数据流的处理方式,作者深入浅出,译者更是精雕细琢,本书需要细品。 将持续阅读整理,先从理论走一轮,再找一些系统做一做实验。...

  • 常见的linux进程状态如下: 关于源文件xmid,可以从Mind-Mapping获取 这里借助进程状态来描述一下linux系统中的平均负载的概念 当我们感觉到系统变慢时,通常通过top和uptime命令来了解系统的负载情况 [root@pub-ncpu-ndb0 ~]# uptime21:06:13 up 8 days, 7:...

  • 围绕分布式存储(ceph)绘制的技能图谱可参考分布式存储ceph 技能图谱 相关的原始编辑文件可以从github-mindMapping下载 如有缺失、不足之处欢迎指正 CEPH架构 关于系统架构,这里主要是将CEPH融入操作系统架构之中 且是根据L版本进行绘制的 关于文件系统 :因为bluestore跳过了本地文件系统,同时封...

  • linux 系统崩溃完全没有操作空间的系统修复 1、通过U盘系统启动 2、修复文件系统 https://editor.csdn.net/md/?articleId=106213788 此时硬盘会被挂在到U盘系统下作为一个目录, 例如/dev/sda2 修复它: fsck -y /dev/sda2 很多时候都有效 3、修复g...