对于百度Android SDK使用中初始化线程Tmcom_socket引起的问题

 前段时间因为项目中有需要用到百度Android SDK中的反地址查询,因此使用了Android SDK。

      开始阶段一切顺利,没出现什么问题,可以顺利通过经纬度进行反地址的查询并查到详细的地址信息,但是后来经过详细的反复测试发现一个问题,那就是会有概率出现应用程序启动时CPU占用会逐渐上升到50%左右,通过top可以查询并跟踪到线程名为Tmcom_socket的线程时钟占用CPU。但是后来由于没找到更详尽的方法来确定此线程是在什么地方开启,由什么开启的。于是采用了一个比较笨拙的办法,即逐段代码排除。

      最后排查到SDK初始的部分,基本确定了是由初始化造成的。贴出百度开发指南中的初始化实例:

      

第五步:初始化地图Activity、使用Key:

    在MyMapActivity中定义成员变量:

  1. BMapManager mBMapMan = null;  
  2. MapView mMapView = null;  

    在onCreate方法中增加以下代码,并将您申请的开发密钥替换“我的Key”

  1. super.onCreate(savedInstanceState);  
  2. mBMapMan=new BMapManager(getApplication());  
  3. mBMapMan.init(null);   
  4. //注意:请在试用setContentView前初始化BMapManager对象,否则会报错  
  5. setContentView(R.layout.activity_main);  
  6. mMapView=(MapView)findViewById(R.id.bmapsView);  
  7. mMapView.setBuiltInZoomControls(true);  
  8. //设置启用内置的缩放控件  
  9. MapController mMapController=mMapView.getController();  
  10. // 得到mMapView的控制权,可以用它控制和驱动平移和缩放  
  
  
  1. GeoPoint point =new GeoPoint((int)(39.915* 1E6),(int)(116.404* 1E6));  
  1. //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)  
  2. mMapController.setCenter(point);//设置地图中心点  
  3. mMapController.setZoom(12);//设置地图zoom级别  


     可以看到初始化中会new一个BMapManager对象,并且紧跟着会进行初始化这个对象。这个init函 数具体做什么操作尚无法得知,但是可以肯定的是此操作是取应用申请到的key来进行验证授权,因此可以确定此步骤需要进行网络连接来验证。但是问题恰好在此出现,因为我所测试的时候并未连接网络,由此可猜测此处的Socket线程就是在无网络的时候阻塞的。引起此问题的原因是网络未连接,但是socket线程并不知道服务器端已经断开连接,而进行反复的连接从而占用了CPU,后来也曾试过做超时处理,但是始终没法解决,最后不得已进行了网络状况的判断来执行初始化。但是这样做的弊端可能就是在无网络的时候无法初始化此对象,从而导致后来联网后反地址查询也无法使用,必须在联网后重启应用才可以。

需特别注意的是,这部分初始化的操作百度要求要在setContentView之前做否则会有异常出现,由此也会增加不少应用的局限性。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值