BlackBerry应用程序使用LocationListener在OS 6上冻结

时间:2011-04-01 11:00:02

标签: java blackberry gps location

我有一个Java应用程序,它使用 LocationProvider API在应用程序启动时注册 LocationListener ,并在关闭应用程序时注销它。当将应用程序放在后台并将其恢复到前台时,它也会这样做。

这在大多数情况下运行良好,但我最近在不同的设备上遇到了应用的冻结/挂起(例如,我可以在我的BlackBerry Torch OS 6上重现它,似乎更经常发生在OS 6设备上)。

打开该应用,关闭重新开启,当我尝试冻结 >再次关闭。我不能再关闭它了。我必须使用“切换应用程序”功能转到另一个应用程序(通过按住菜单按钮或按绿色或红色按钮)。

在我收到错误消息后,说应用程序没有响应并关闭。

代码如下所示:

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 个答案:

答案 0 :(得分:1)

在事件线程上调用位置侦听器(您不提供代码)。如果在事件线程上调用的方法阻塞的时间太长,则会导致您遇到的挂起。操作系统最终会因无法响应而终止此类应用程序。您需要查找可能需要很长时间才能执行的LocationListenerImpl段,或者发布该代码以便我们查看它。