对于Midlet状态,有一个叫application management software的会专门负责管理。你所有要关心的,就是怎样和这个AM打交道。
pauseApp() destroyApp() startApp()
重写这三个方法。AM将会在相应的时间调用。
而 notifyDestroyed() notifyPaused() resumeRequest() 则是让你有机会去通知AM需要做什么。
下面是一个简单的例子,可以根据自己扩充测试一下。有一点比较奇怪的就是,理论上说,在Midlet处于Active状态的时候,如果有电话进入,AM会调用pauseApp()。但是实际测试时,没有发现AM调用这个方法。
package net.csdn.blog.vincint;
import javax.microedition.midlet.*; import javax.microedition.lcdui.*;
/** * This is a simple test to help me understanding the Midlet state * * <p>Title: Midlet Test</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2005</p> * <p>Company: http://blog.csdn.net/Vincint</p> * @author Vincint * @version 1.0 */ public class MidletState extends MIDlet implements CommandListener { protected Form form; protected Command exitCmd; protected Command debugCmd; protected Display display; protected String debug; public MidletState() { addDebugInfo("In MidletState()"); display = Display.getDisplay(this); form = new Form("Hello world."); form.append("What a new world!"); exitCmd = new Command("Exit", Command.EXIT, 1); debugCmd = new Command("Debug", Command.SCREEN, 2); form.addCommand(exitCmd); form.addCommand(debugCmd); form.setCommandListener(this); }
/** * startApp */ protected void startApp() { addDebugInfo("In startApp()"); display.setCurrent(form); }
/** * pauseApp */ protected void pauseApp() { addDebugInfo("In pauseApp()"); }
/** * destroyApp * * @param boolean0 boolean */ protected void destroyApp(boolean boolean0) { addDebugInfo("In destroyApp(" + boolean0 + ")"); }
/** * commandAction * * @param command Command * @param displayable Displayable */ public void commandAction(Command command, Displayable displayable) { addDebugInfo("In commandAction(...)"); if (command == exitCmd) { destroyApp(true); notifyDestroyed(); } else if (command == debugCmd) { notifyUser(debug, form); } }
protected String addDebugInfo(String debugMsg) { if (debug == null) { debug = new String(); } debug = debug.concat(debugMsg + "\n"); return debugMsg; }
protected void notifyUser(String message, Displayable screen) { Alert alert = new Alert("Info", message, null, AlertType.INFO); alert.setTimeout(Alert.FOREVER); display.setCurrent(alert, screen); } } 
|