手机的中断事件一般就是来电话、短信或是按手机上的红键,理论上来说这些事件一但产生手机便会调用中断处理。但实际上每个不同产商的手机都会有些许不同的地方。

1) 一般来说手机中断时会调midlet的pauseApp()的,然后回来会调startApp(),这样就可以在这两个函数中进行中断的处理。

2) 但有些手机其实不会去调用pauseApp(),而是在中断时调用Canvas的hideNotify(),在中断返回时(当然包括启动时)会调用Canvas的showNotify(),中断处理便可以放在这两个函数中。

3) 当然还有一些手机更牛,上面的两种情况都不调用,这时就可使用公司称为“软中断”的东西了。所谓的软中断,其实就是在程序中判断程序一次循环的间隔时间,如超过某设定值(一般都是3秒)就调用中断处理函数。例如:

  

if (System.currentTimeMillis() - s_previousTime > cDef.k_virtual_interrupt_time)
             {
                 hideNotify();
                 showNotify();
             }
         s_previousTime = System.currentTimeMillis();

4) 冒似还有一些更神奇的手机,中断调用的顺序是乱来的。有可能先调showNotify反回调hideNotify,而且有可能还不只一次。遇到这些手机,大家可以在真机上测试,把每个中断处理函数的调用次数顺序打印出来分析。


例子:

在 来电话、短信 或者“最小化”之后选择“继续”,返回当前页面

public class IMusicMIDlet extends MIDlet {
  
  private boolean isPaused = false;
  public IMusicMIDlet() {
   super();
  }protected void startApp() throws MIDletStateChangeException {
   // 如果是暂停
   if (isPaused) {
    isPaused = false;  return;
   }
   
   //执行主程序}
protected void pauseApp() {
   isPaused = true;
  }protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
    
  }