Как выйти / завершить / остановить мидлет j2me?

Удивительно, но завершение мидлета не работает в моем приложении. Может быть, это потому, что я использую потоки, но 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);
    }

}


person hsmit    schedule 25.04.2010    source источник
comment
Я не нашел решения в stackoverflow.com/questions/1485943/, к сожалению.   -  person hsmit    schedule 25.04.2010


Ответы (2)


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

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

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

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

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

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

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

person michael aubert    schedule 26.04.2010

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

person Wonil    schedule 26.04.2010