4

我在J2ME中做了一个小应用程序,它只是打开带有目标链接的浏览器。

尽管如此,它在某些型号的手机中有效,而在其他型号中则无效。

它适用于:

  • 黑莓 9000。
  • 诺基亚 n97。
  • 黑莓 Javeline 8900

ID不适用于:

  • 诺基亚 e71:它安装了应用程序,但浏览器没有打开。
  • 诺基亚 n81:同上。
  • 三星 f330:无法安装应用程序。
  • BB 9800:安装好。浏览器页面确定。关闭应用程序时,它会重新启动。(也许在JavaME中使用某种“finish()”会有所帮助?)

我不知道为什么它在某些手机中有效,而在其他手机中无效。理论上,它应该适用于所有支持J2ME ( JavaME ) 的手机。

编辑:这是相关代码。

protected void startApp() throws MIDletStateChangeException {
        // TODO Auto-generated method stub

    boolean mustExit = false;
    try {

        /**
         * mustExit - Boolean
         * 
         * Some MIDP platforms are more restricted than others.
         * For example, some don't support concurrent processing,
         * so the MIDlet must exit before the platform can honor
         * a service request.
         * 
         * If <true> destroy the app. So the browser
         * can start.
         */
        mustExit = platformRequest("http://www.stackoverflow.com");
    } catch (ConnectionNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    if(mustExit){
        destroyApp(true);
        notifyDestroyed();
    }

    //Display.getDisplay(this).setCurrent(timeAlert);

}
4

1 回答 1

5

您不应该platformRequest在诸如startApp(). 这是一个异步操作,它需要向用户请求权限等。这不应该在系统线程上完成。

在系统线程上调用的方法应尽可能立即返回,因为该线程可能会负责执行其他操作,例如屏幕重绘或处理用户输入。 platformRequest是一种阻塞操作,会导致您的设备冻结。

某些设备可以比其他设备更好地处理此问题,这就是您看到差异的原因。

启动一个新线程来做platformRequest,一切都应该很好;你几乎可以在任何地方开始你的新线程。

于 2012-03-09T09:03:01.587 回答