【问题标题】:App Crash due to Location Client Illegal State由于位置客户端非法状态导致应用程序崩溃
【发布时间】:2014-07-16 07:25:59
【问题描述】:

我有一个基本应用程序,它使用 Google 地图在设备的最后一个已知位置放置一个自定义标记。由于位置客户端引发的非法状态异常,该应用程序经常崩溃。

java.lang.IllegalStateException: Not connected. Call connect() and wait for onConnected() to be called.

这通常是在 Asynctask 完成然后使用新信息调用地图更新但由于暂停活动而中断时引起的。我尝试设置一个简单的布尔检查以确定客户端是否在尝试更新之前已连接。

if (servicesConnected() && locClientConnected)  {
        loc = lClient.getLastLocation();
//code to draw circle
}

但这似乎对 ANR/crash 没有影响,因此它在活动处于活动状态时执行,但在调用此之前大多数未完成:

protected void onPause()    {
    lClient.disconnect();
    super.onPause();
}

在此处删除断开连接并让它完成是否是一种好习惯?或者这甚至会有所作为?我希望有人遇到过 Location 客户端的这个问题。 :)

【问题讨论】:

    标签: android google-maps location-client


    【解决方案1】:

    可能的解决方案:

    1. 使用 Loaders 而不是 AsyncTask 来避免这种行为。
    2. 绘制前检查活动状态

      void onPause(){
          allowDraw = false;
          ...
      }
      
      void onResume(){
          allowDraw  = true;
          ...
      }
      
      if (servicesConnected() && locClientConnected && allowDraw)  {
          loc = lClient.getLastLocation();
          //code to draw circle
      }
      
    3. 使用 try catch 块:)

    【讨论】:

    • 感谢您的建议。我认为最简单的方法是 updateMap() 方法中的 try-catch 块。我之前在 asynctasks 中实现了一个 try-catch,但没有解决这个问题。感谢您向我展示 Loader 类。从来不知道它存在:)
    猜你喜欢
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 2016-08-05
    相关资源
    最近更新 更多