首页 文章

为什么应用程序停止一段时间并且按钮也没有按下

提问于
浏览
0

这是我的程序的要点..当我按下按钮告诉位置时,如果地理编码器没有抛出任何异常,它工作正常,但问题出现时地理编码器抛出异常,同时我的应用程序停止了一段时间就像它挂起..因为进度条停止旋转......并且停止按钮也没有按下......但是在30秒或1分钟之后它没有打印出来的地址......任何人都可以帮我解决这个问题...提前谢谢你 .

//这是在onCreate方法中的locationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,3,this);

//分隔Mehtod public void geo(双纬度,双经度){

if(Geocoder.isPresent())
    {

        try 
        {

        Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
     List<Address> listAddresses = geocoder.getFromLocation(latitude, longitude, 1);

        if(null!=listAddresses&&listAddresses.size()>0)
        {
             Location = listAddresses.get(0).getAddressLine(0);

        }

    else
    {
        Toast.makeText(getBaseContext(), "Searching..",dur).show();
    }

    } 

    catch (Exception e) 
    {
        //Toast.makeText(this,Location, dur).show();

        Toast.makeText(getBaseContext(), "No address found",dur).show();
    }
    }
    else
    {
        Toast.makeText(getApplicationContext(),"wait...",dur).show();
    }
}

获取纬度和经度后,在获取位置时,使用onLocationChanged方法调用此geo方法 .

2 回答

  • 0

    我假设问题出在地理编码器's attempts to get your location (maybe it'只是等待来自传感器或网络的响应) . 您应该在单独的线程中对地理编码器执行请求以防止挂起(您可以使用AsyncTask) . 但请注意,所有使用UI的工作,如显示祝酒词,都必须在主UI线程中完成(您可以使用方法runOnUiThread from Activity

  • 0

    考虑位置服务,您每1秒实例化一次收集位置信息,使用此服务不是在UI线程中而是在服务或线程中,这是一个很好的做法,并且遵循以下步骤是一个好习惯:

    为最佳性能定义模型基于位置的应用程序现在已司空见惯,但由于精度低于最佳,用户移动,获取位置的多种方法以及节省电池的需求,获取用户位置变得复杂 . 要克服在保留电池电量的同时获得良好用户位置的障碍,您必须定义一致的模型,以指定应用程序获取用户位置的方式 . 此模型包括您何时开始和停止侦听更新以及何时使用缓存的位置数据 . 获取用户位置的流程以下是获取用户位置的典型流程:启动应用程序 . 2.稍后,开始收听所需位置提供商的更新 . 3.通过过滤掉新的但不太准确的修复来维持位置的“当前最佳估计” . 4.停止侦听位置更新 . 4.利用最后的最佳位置估算 .

相关问题