当前位置: 首页 > 编程日记 > 正文

转 深入理解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

相关文章:

LeetCode实战:最大子序和

题目英文 Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum. Example: Input: [-2,1,-3,4,-1,2,1,-5,4], Output: 6 Explanation: [4,-1,2,1] has the largest sum 6.Follow up…

PHP如何更好的利用PHPstorm的自动提示

说明 写了一段时间的java之后,特别不习惯PHP本身的弱类型方式,在写代码的时候总觉得不怎么放心,特别本身PHP又是弱类型的语言,所以在编码的时候,很多时候是没有代码提示的。 一个一般例子 class Data {public $name;pu…

2021年Java面试题目最新总结【90%面试会踩的坑】

学会java技术之后大家面临的最多的问题就是面试这关,求职面试java岗位是否能够成功是直接影响我们的工作机会的,所以对于Java程序员面试你准备好了吗?今天小编汇总了一下关于Java程序员面试,90%会踩到的坑。 2021年Java面试题目最新总结【90…

LeetCode实战:螺旋矩阵

题目英文 Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. Example 1: Input: [[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ] ] Output: [1,2,3,6,9,8,7,4,5]Example 2: Input: [[1, 2, 3, 4],[5, 6, 7, 8],[9,10,11,…

Json的序列化和反序列化

1、引用命名空间: usingSystem.Runtime.Serialization;2、json的序列化和反序列化的方法&#xff1a; publicclassJsonHelper {///<summary>///序列化///</summary>///<typeparam name"T"></typeparam>///<param name"t">&l…

Angular开山篇

1&#xff1a;环境搭建 今天给大家介绍4种环境搭建的方法。一&#xff1a;Angular-cli的安装 官方指导文档&#xff1a;www.angular.cn/guide/quickstart 请使用cnpm来安装&#xff0c;或者配置淘宝镜像。 使用原生npm安装可能会遇到的问题&#xff1a; 需要python的环境可能会…

零基础参加软件测试培训需要学多长时间

软件测试对于零基础学员来说是非常好入门的&#xff0c;软件测试没有很多的限制&#xff0c;那么零基础参加软件测试培训需要学多长时间呢?来看看下面的详细介绍吧。 零基础参加软件测试培训需要学多长时间?软件测试培训时间一般都在四个月左右&#xff0c;四个月时间的课程内…

Windows API函数大全

1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一…

LeetCode实战:螺旋矩阵 II

题目英文 Given a positive integer n, generate a square matrix filled with elements from 1 to n^2 in spiral order. Example: Input: 3 Output: [[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ] ]题目中文 给定一个正整数 n&#xff0c;生成一个包含 1 到 n^2 所有元素&#x…

电子文件归档为什么非云不可

本文讲的是电子文件归档为什么非云不可华为云为企业搭建功能强大的电子文件归档系统平台&#xff0c;一站式满足文件存储与管理、协同分享、移动办公等不同的业务需求。打造安全、高效、便捷的文件归档环境&#xff0c;帮助企业节省运营成本&#xff0c;优化管理流程&#xff0…

北京学习Java培训有哪些比较好

北上广算是互联网技术大咖的聚集之地&#xff0c;很多知名互联网企业都在这些城市&#xff0c;随之java培训机构也是非常多的&#xff0c;那么在北京学习java培训有哪些比较好呢?来看看下面的详细介绍吧。 北京学习Java培训有哪些比较好?想要在这些培训机构中选择比较靠谱的J…

C#命名规则、开发习惯和风格

1. 文件命名组织 1-1文件命名 1. 文件名遵从Pascal命名法&#xff0c;无特殊情况&#xff0c;扩展名小写。 2. 使用统一而又通用的文件扩展名&#xff1a; C# 类 .cs 1-2文件注释 1. 在每个文件头必须包含以下注释说明 1 在每个文件头必须包含以下注…

LeetCode实战:不同路径

题目英文 A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below). The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked ‘Fini…

前端部分面试题整理,欢迎补充

1.ng中如何配置路由&#xff0c;$scope和$rootscope的原理ng中如何配置路由?1)使用内置路由模块ng-routevar app angular.module(ngRouteExample, [ngRoute]).controller(MainController, function($scope) {}).config(function($routeProvider, $locationProvider) {$routeP…

JS栈结构的简单封装

栈&#xff1a;是一种遵循后进先出(Last In First Out / LIFO) 原则的一种有序集合。 新添加或者要删除的元素都会保存在栈的同一端&#xff0c;我们把它叫做栈顶&#xff0c;另外一端叫做栈底。 在栈中所有的新元素都接近栈顶&#xff0c;而所有的旧元素都接近栈底。 在我们的…

记录CSS3 target伪类简介

CSS3 target伪类是众多实用的CSS3特性中的一个。它用来匹配文档(页面)的URI中某个标志符的目标元素。具体来说&#xff0c;URI中的标志符通常会包含一个”#”字符&#xff0c;然后后面带有一个标志符名称&#xff0c;比如#respond&#xff0c;target就是用来匹配ID为respond的元…

LeetCode实战:合并两个有序数组

题目英文 Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: The number of elements initialized in nums1 and nums2 are m and n respectively.You may assume that nums1 has enough space (size that is greater o…

Java云托管服务的开支削减策略

\摘要\随着项目不断扩大&#xff0c;你需要将其迁移到更大的虚拟机上。但如果新虚拟机环境超出了你的需求则会产生额外开支。\相比虚拟机&#xff0c;容器具有更小的粒度&#xff0c;并且无需重启运行中的实例即可垂直扩展。\单体应用和历史遗留应用无需更改配置&#xff0c;即…

SpringBoot培训教程--史前文明之Spring简介

一. Spring之起源 1.你知道J2EE吗? 要说到Spring的历史起源&#xff0c;首先咱们要说说J2EE这个玩意儿。 J2EE在1999年和2000年的时候开始得到广泛实现&#xff0c;在J2EE中提出了”事务管理“等核心中间层标准化的概念&#xff0c;但是在实践中出现了各种问题&#xff0c;尤其…

利用外部命令Oralce数据库导入导出

1--数据库导出(exp) 首先进入命令行 导出数据库 在命令行中输入如下命令: exp c2j/c2jc2j filec:/table.dmp tablesjbitaku,jbitakum grantsy 然后按回车键 说明: c2j/c2jc2j 分别表示用户名&#xff0c;密码和服务名 file&#xff1a;输出文件的位置和文…

LeetCode实战:子集

题目英文 Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The solution set must not contain duplicate subsets. Example: Input: nums [1,2,3] Output: [[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[] ]题目中文 给定一组…

linux的挂载命令

在linux中所有的存储设备都必须挂载后才能使用&#xff0c;相当于windows的分配盘符 挂载命令 mount #查看系统中已经挂载好的设备 mount -a #根据/etc/fstab中的内容&#xff0c;自动挂载 /etc/fstab是系统开机的自动挂载文件 系统挂载时要自动检车测这个文件&#xff0c;如果…

软件测试需要学习什么技术

软件测试在近几年被很多企业都重视起来&#xff0c;互联网时代&#xff0c;APP种类越来越多&#xff0c;软件测试这一行业的发展前景是非常大的&#xff0c;那么想要学习软件测试需要学习什么技术呢?来看看下面的详细介绍。 软件测试需要学习什么技术? 每个软件在上线之前都离…

silverlight4.0 写文件不能设置默认文件名

Silverlight4.0 不提供SaveFileDialog的SafeFileName的写属性 Weve not exposed the "DefaultFileName" property on SaveFileDialog due to time constraints.Moe Elshall | Silverlight Development TeamMicrosoft Corporation等待5.0解决问题。转载于:https://www…

我是如何组织“算法刻意练习活动”的?

背景 在上个学期末&#xff0c;我们组织了一次团队的招新活动 – 如何加入 LSGO 软件技术团队&#xff1f;。 我们让预加入团队的同学在假期中完成以下两个任务之一&#xff1a; 学习 C# 语言&#xff1a; https://www.bilibili.com/video/av2357992/?p1学习 Python 语言&a…

[Ubuntu] ubuntu10.04系统维护之Wine的安装

在介绍安装wine之前&#xff0c;我想是有必要先介绍一下Wine的。当然&#xff0c;如果是Liunx的高手&#xff0c;我想是没必要看的&#xff0c;但是对于笔者这样的菜鸟级人物还是需要看一下的。 Wine是一款Liunx下的模拟器软件&#xff0c;但是Wine又不仅仅是一个模拟器软件&am…

Python培训教程:Python内置数据结构之双向队列

经常听说Python就是一门执行速度低的语言&#xff0c;可能是你的程序中使用了复杂的算法与数据结构&#xff0c;才会导致程序执行速率低的。在Python的标准库中提供了常见的数据结构工开发者使用&#xff0c;不仅执行速率比较快&#xff0c;还可以简化开发者的编程工作。下面我…

华为hybrid-vlan

华为hybrid-vlan、三层交换、DHCP拓扑&#xff1a;需求&#xff1a;1.路由器终结vlan2.交换机间以hybrid方式透传vlan3.PC以DHCP获取IP思路&#xff1a;1.PC的网关在路由器上2.配置hybrid-vlan3.配置DHCP步骤&#xff1a;路由器AR1&#xff1a;<Huawei>sy[Huawei]vlan 10…

android 按住拖动gallery防止马上加载数据导致gallery卡的方法

gallery菜单滑动有一个不好的效果就是每次经过中间的菜单都默认是被选中状态&#xff0c;同时会加载数据 以至于切换不流畅&#xff0c;有一种卡卡的感觉&#xff01;&#xff01;其实用线程来处理这个问题&#xff0c;一定的时间后如果选择的index值不变&#xff0c;说明已经稳…

LeetCode实战:买卖股票的最佳时机

背景 为什么你要加入一个技术团队&#xff1f;如何加入 LSGO 软件技术团队&#xff1f;我是如何组织“算法刻意练习活动”的&#xff1f;为什么要求团队的学生们写技术Blog 题目英文 Say you have an array for which the ith element is the price of a given stock on day …