java - 使用 LocationListener 的 BlackBerry 应用程序在 OS 6 上卡住

标签 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             
    }
  }
}

最佳答案

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

关于java - 使用 LocationListener 的 BlackBerry 应用程序在 OS 6 上卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5512430/

相关文章:

java - 在 Java 中声明 BigDecimal 数组的初始值

java - 通过 JNA 将 InputStream 作为文件指针传递给 C 代码

java - 字符出现频率

java - 要求在应用程序内使用 BlackBerry PIN

ios - Swift - 从 didUpdateLocations 获取 GPS 坐标需要很长时间才能返回值

c# - 从 Web 应用程序获取地理坐标

java - 无法读取工作目录中的文件

java - 如何检查数组中是否已存在元素

java - 通过 BlackBerry 发送 POST 数据后获取 HTML 响应

python - 如何计算两个地理坐标的距离?