javax.wireless.messaging Interface MessageListener
MessageListener接口提供了一个可使程序在有信息到来时得到通知的机制。
当有信息到来时,notifyIncomingMessage()将被调用。程序必须用MessageConnection的receive()方法接收信息。MessageListener却不应直接调用receive(),而应该使用一个新的线程,或调用一个不在此接口内部实现的方法来间接地调用receive()。比如下面一个简单的MessageListener实现将展示如何使用MessageListener。
此接口提供的机制使得程序不需要在receive()方法中将线程挂起。
如果有不止一个信息在接近的时刻到达,此接口的实现将可能被同步地被通知。程序必须同步某些部分以处理上述情况。
__________________________________________________________________________
简单的MessageListener实现
以下的代码展示了如何使用MessageListener。在这个例子中一个独立的线程被用来处理信息的接收。
import java.io.IOException; import javax.microedition.midlet.*; import javax.microedition.io.*; import javax.wireless.messaging.*; public class Example extends MIDlet implements MessageListener { MessageConnection messconn; boolean done; Reader reader; //初始化 public void startApp() { try { // 建立连接 messconn = (MessageConnection) Connector.open("sms://:6222"); // 注册listener messconn.setMessageListener(this); / / 建立接受信息的线程 done = false; reader = new Reader(); new Thread(reader).start(); } catch (IOException e) { // 处理错误 } } // 同步 public void notifyIncomingMessage(MessageConnection conn) { if (conn == messconn) { reader.handleMessage(); } } // 关闭连接 // 停止线程 public void pauseApp() { done = true; try { messconn.close(); } catch (IOException e) { //处理错误 } } // MIDlet 停止 // @param unconditional forced shutdown flag public void destroyApp(boolean unconditional) { done = true; try { messconn.setMessageListener(null); messconn.close(); } catch (IOException e) { // 错误处理 } } //用另外的线程处理信息接收则 // notifyIncomingMessage()可以很快返回 class Reader implements Runnable { private int pendingMessages = 0; // 处理接收信息的实际工作 public void run() { while (!done) { synchronized(this) { if (pendingMessages == 0) { try { wait(); } catch (Exception e) { // 处理错误 } } pendingMessages--; } // 使用的MessageListener好处 // 这个线程可由同样的机制激活 // 来处理别的事件 //而不仅是接收信息 try { Message mess = messconn.receive(); } catch (IOException ioe) { // 处理错误 } } } public synchronized void handleMessage() { pendingMessages++; notify(); } } }
________________________________________________________________________
Method Detail
notifyIncomingMessage public void notifyIncomingMessage(MessageConncetion conn)
当由信息到来是由系统调用,并且每一条信息都将引发此方法被调用。
提示: 此方法的实现必须快速的返回,不应做任何不必要的操作。程序不应该在此方法中接收或处理信息。它只应激发 程序处理信息的线程。
Parameters: conn:信息抵达的MessageConnction。 
|