Приложение BlackBerry зависает на OS 6, используя LocationListener - PullRequest
1 голос
/ 01 апреля 2011

У меня есть Java-приложение, которое использует LocationProvider API для регистрации LocationListener при запуске приложения и отменяет его регистрацию при закрытии приложения.То же самое происходит, когда приложение помещается в фоновый режим и возвращается на передний план.

В большинстве случаев это работает довольно хорошо, но в последнее время я испытываю зависаний / зависаний приложения наразличные устройства (например, я мог бы воспроизвести его на моей BlackBerry Torch OS 6, кажется, что это происходит чаще на устройствах с OS 6).

I открыть приложение, закрыть его , открыть оно и оно зависает при попытке закройте снова .Я не могу закрыть это больше.Я должен использовать функцию «переключить приложение», чтобы перейти к другому приложению (удерживая кнопку «Меню» или нажав зеленую или красную кнопку).

Через некоторое время я получаю сообщение об ошибке, в котором говорится, что приложение не отвечает и было закрыто.

Код выглядит следующим образом:

public void activate() {
    if (ApplicationPermissionsManager.getInstance().getPermission(14) == ApplicationPermissions.VALUE_ALLOW) {
        startLocationProvider();
    }
}

public void deactivate() {
    if (ApplicationPermissionsManager.getInstance().getPermission(14) == ApplicationPermissions.VALUE_ALLOW) {
        stopLocationProvider();
    }
}

public boolean onClose() {
    stopLocationProvider();
    System.exit(0);
    return true;
}

public void startLocationProvider() {
  try {
    locationProvider = LocationProvider.getInstance(new BlackBerryCriteria(GPSInfo.GPS_MODE_ASSIST));
    if (locationProvider != null) {
      locationProvider.setLocationListener(new LocationListenerImpl(), 10, 9, -1);
    }
  } catch (Exception le) {
    // log it           
  }
}

public void stopLocationProvider() {
  if (locationProvider != null) {
    try {
      locationProvider.setLocationListener(null, -1, -1, -1);
      locationProvider = null;
    } catch (Exception se) {
      // log it             
    }
  }
}

1 Ответ

1 голос
/ 22 августа 2011

Прослушиватель местоположения (для которого вы не предоставляете код) вызывается в потоке событий.Если метод, вызываемый в потоке событий, блокируется слишком долго, это вызывает зависание, которое вы испытываете.ОС в конечном итоге убьет такие приложения за неспособность ответить.Вам нужно найти сегменты LocationListenerImpl, выполнение которых может занять много времени, или опубликовать этот код, чтобы мы могли на него взглянуть.

...