Как выйти / прекратить / остановить мидлет j2me? - PullRequest
4 голосов
/ 25 апреля 2010

Удивительно, завершение мидлета не работает в моем приложении.Может быть, это потому, что я использую Threads, но destroyApp() и notifyDestroyed() недостаточно.

Возьмем, например, следующий код:

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
    System.out.println("destroying");
    notifyDestroyed();
}
protected void startApp() throws MIDletStateChangeException {
   try {
        // init modules
        controller.initialize();
    }catch (Exception e) {
        viewer.showAlert("error in startApp() init controller");
        destroyApp(true);
    }

}

Ответы [ 2 ]

2 голосов
/ 26 апреля 2010

Вы конкретно звоните notifyDestroyed() изнутри startApp().

Мое лучшее предположение - то, что телефон (или эмулятор), на котором вы пытаетесь это сделать, не справляется с этим слишком хорошо.

Попробуйте вместо этого:

  • Когда controller.initialize() выдает исключение, отобразите простое Form с одним «Выходом» Command и сообщением об ошибке StringItem.

  • Звоните notifyDestroyed() из CommandListener.commandAction() обратного вызова.

Что касается потоков, то вы сами должны их прекратить, когда пользователь захочет выйти из вашего приложения.

Большинство сред выполнения MIDP могут работать с некоторыми потоками, которые не завершаются должным образом, но если системные ресурсы не очищаются должным образом, это может вызвать проблемы, особенно на платформах, которые пытаются никогда не завершить сам процесс виртуальной машины Java.

0 голосов
/ 26 апреля 2010

Вы должны вызвать метод notifyDestroyed для выхода из приложения, а не метода destroyApp.

...