由于位置客户端非法状态导致应用程序崩溃

时间:2014-07-16 07:25:59

标签: android google-maps location-client

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

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 /崩溃没有影响,因此它在活动处于活动状态时执行但在调用之前大部分都没有完成:

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

在这里删除断开连接并允许它完成是不错的做法?或者甚至会有所作为?我希望有人遇到过Location客户端这个问题。 :)

1 个答案:

答案 0 :(得分:0)

可能的解决方案:

  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 block:)