转 深入理解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
转 深入理解Midlet类相关推荐
- 深入理解JavaScript类数组
起因 写这篇博客的起因,是我在知乎上回答一个问题时,说自己在学前端时把<JavaScript高级程序设计>看了好几遍. 于是在评论区中,出现了如下的对话: 天啦噜,这话说的,宝宝感觉到的, ...
- 这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析
前言 package com.jvm.classloader;class Father2{public static String strFather="HelloJVM_Father&qu ...
- 1.5 深入理解常见类
第5章 深入理解常见类 5.1 概述 初次接触Android源码,最多见到的一定是sp和wp.如果你只是沉迷于Java世界,那么Looper和Handler也是避不开的.本章的目的,就是把经常碰见的这 ...
- [Python]五分钟理解元类(Metaclasses)
五分钟理解元类(Metaclasses) 真的,它并非巫术. 原文地址:http://www.voidspace.org.uk/python/articles/five-minutes.shtml 日 ...
- 对于类对象模型的理解(类大小计算+大小端字节序)
类对象模型 如何理解类与对象 类: 通俗理解,类相当于一个模型框架,限定了类有哪些成员变量,但从底层来看,内存并没有分配实际的物理空间来存储类 对象: 类对象即为类的具体描述,当类对象进行实例化过程中 ...
- [深入理解Android卷一全文-第五章]深入理解常见类
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. ...
- Python进阶:理解元类创建类ABCMeta
Python进阶:Python进阶:理解元类创建类ABCMeta 一.理解元类(Meta class) 1.1 元类直观理解 1.2 Python官方文档给出的元类描述 二.理解抽象基类(ABC, A ...
- 深入理解JVM类文件格式
我们知道Java最有名的宣传口号就是:"一次编写,到处运行(Write Once,Run Anywhere)",而其平台无关性则是依赖于JVM, 所有的java文件都被编译成字节码 ...
- spi 动态加载、卸载_理解 ServiceLoader类与SPI机制
对于Java中的Service类和SPI机制的透彻理解,也算是对Java类加载模型的掌握的不错的一个反映. 了解一个不太熟悉的类,那么从使用案例出发,读懂源代码以及代码内部执行逻辑是一个不错的学习方式 ...
最新文章
- json loads No JSON object could be decoded 问题解决
- iview tooltip自动消失_惠州广日自动人行道价格大概多少
- Bugzilla集成LDAP的方法
- 《贝叶斯方法:概率编程与贝叶斯推断》一导读
- uni-app实现上拉加载更多
- SDRAM控制器设计
- 草稿 listview控件切换大小图标
- CVPR 2019 神奇的超分辨率算法DPSR:应对图像模糊降质
- 2019 年最好用的 7 款数据库监控工具
- [UVALive 3661] Animal Run
- XPath学习:轴(2)——parent
- 博客园博客转至个人网站博客声明
- error: C++ requires a type specifier for all declarations
- 安装QQ时创建目录失败的解决办法
- 虚拟WIFI软件测试工程师,【Wifi测试工程师是什么职位】中互联zhl.com2021年Wifi测试工程师待遇怎么样-看准网...
- 论文投稿指南——中国(中文EI)期刊推荐(第6期)
- 【基于Arduino RFID门禁系统】
- c3p0的基本使用方法
- 关于人工智能-微软和谷歌没有告诉你的是什么
- 将单向链表按某值划分成左边小、中间相等、右边大的形式
热门文章
- yii2服务器无法加载文件夹,用Yii2做的项目在部署到云服务器后访问无反应,也没有任何数据响应...
- python中的随机函数怎么用_Python中随机数的使用方法有那些?
- 给模型加装饰器Java,装饰器设计模式
- java 根据ip获取mac地址_利用java如何根据IP获取mac地址
- const修饰的指针常量和常量指针
- php access token缓存,微信小程序PHP 生成access_token存入缓存
- mqtt session保持 订阅消息_如何使用 MQTT 报文实现发布订阅功能
- javascript如何实现功能的分析
- 项目3:(4)点到直线的距离以及夹角
- 30行Python代码实现高分辨率图像导航