предыдущий экземпляр все еще активен в Blackberry ошибка - PullRequest
0 голосов
/ 20 марта 2011

Я создал приложение, которое пользователь может запустить из меню и со значка.Я не использую GlobalEventListener в своем приложении, просто зарегистрирую ApplicationMenuitem.И теперь я получаю сообщение об ошибке: предыдущий экземпляр все еще активен при запуске моего приложения.

Шаги для воспроизведения не так тривиальны:

  1. Запустите приложение из значка

  2. не закрывайте его, просто переключитесь на другоеapp

  3. снова запустить приложение из значка

Я основал статью на форуме Blackberry об этом, но я не могунайти решение, в котором я должен удалить свой ApplicationMenuItem: он добавляется при загрузке телефона и должен постоянно отображаться.

Мой код:

public class Jingu extends UiApplication {

public static void main(String[] args) {
    ApplicationManager app = ApplicationManager.getApplicationManager();
    boolean keepGoing = true;
    while (keepGoing) {
        if (app.inStartup()) {
            try {
                Thread.sleep(1000);
            } catch (Exception e) {}
        } else {
            keepGoing = false;
        }
    }

    Jingu theApp = new Jingu();
    theApp.initMenuItem();
    theApp.showMainScreen();
    theApp.enterEventDispatcher();
}

public Jingu() {

}

public void showMainScreen() {
    showScreen(new JinguMainScreen(this));
}

public void initMenuItem() {
    // Create menu item
    Object o = RuntimeStore.getRuntimeStore().get(JinguMenuItem.MY_MENU_ID);
    // register only if not done already.
    if (o == null) {
        new JinguMenuItem(this).registerInstance();
    }
}



public void showScreen(Screen aScreen) {
    synchronized (Application.getEventLock()) {

        try {
            UiApplication.getUiApplication().popScreen(aScreen);
        } catch (Exception e) {
        }

        UiApplication.getUiApplication().pushScreen(aScreen);
    }
}

}

public class JinguMenuItem extends ApplicationMenuItem {
public static final long MY_MENU_ID = 0xb9739d5240d5943dL;
private final Jingu jingu;

public JinguMenuItem(Jingu jingu) {
    super(0x350100);
    this.jingu = jingu;
}

public void registerInstance() {
    Object menuItem = RuntimeStore.getRuntimeStore().remove(MY_MENU_ID);
    if (menuItem == null) {
        ApplicationMenuItemRepository amir =                            ApplicationMenuItemRepository.getInstance();
        amir.addMenuItem(ApplicationMenuItemRepository.MENUITEM_SYSTEM, this);
        RuntimeStore.getRuntimeStore().put(MY_MENU_ID, this);
    }
}


public Object run(Object context) {
    jingu.setDefaultFont(Font.getDefault());
    jingu.setMainApp(false);
    jingu.setBbmEditField(null);

    jingu.showMainScreen();

    return context;
}

public String toString() {
    return "My Menu";
}
}

plz совет, где мне следует удалить ApplicationMenuItem в моем приложении?

С уважением,

Вадим

Ответы [ 2 ]

0 голосов
/ 22 марта 2011

Мое решение для этой ситуации:

  1. создать альтернативную точку входа и запустить ее при загрузке приложения
  2. зарегистрировать меню в ней
  3. не использовать runtimeStore
0 голосов
/ 20 марта 2011

Если вы регистрируете ApplicationMenuItem из своего приложения, как пользователь, я бы посчитал плохим стилем удаление и выход из приложения, даже если RIM предоставил способ сделать это.Возможно, вы захотите разделить ваше приложение на две части.Один обеспечивает минимальную поддержку для ответа на выбор ApplicationMenuItem, который запускается автоматически и работает в фоновом режиме.Другой имеет все остальное и может бежать и выходить по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...