当前位置: 代码迷 >> Android >> 手机定时发送数据 间断有关问题 困扰了1个月
  详细解决方案

手机定时发送数据 间断有关问题 困扰了1个月

热度:27   发布时间:2016-04-28 06:15:03.0
手机定时发送数据 间断问题 困扰了1个月
实现效果:手机10分钟一次往服务器端发送数据 0点开始到24点结束
程序逻辑:首先AlarmManager 1S一次执行Service   onStart里start一个Thread 把当前时间戳+1000 通过一个方法getTimeDifference根据现在的时间点来计算离下次发送还有多少S 假设现在是10:15 下次发送是在10:20分 那么getTimeDifference会返回300 然后当getTimeDifference返回0的时候 向服务器发送数据 发送用的是HttpClient Post提交 如果发送不成功那么程序会等待30秒后重试 重复10次 如果还是不成功那么会缓存到本地 在下个时间点能够发送时发送缓存数据。

 
出现问题:程序在市内信号好的地方发送数据是不会间断的 然后在一些开发区人烟稀少的地方 就会出现没有数据上传的情况 比如说12:10 - 12:20 - 12:30 - 12:40 - 13:00 中间就会少掉一个12:50的那个点 不发送的那个时间点是随机出现的 不是固定的 检查过服务端接收没有问题 确实是数据没有上来 

大家有没有什么意见或者遇到过类似的问题 麻烦告诉我一下 谢谢!
------解决方案--------------------
同类问题,共勉!原因不祥!我准备把Http的方法费了,用Socket直接做。不知道下面的代码行不行。

public void networksend(){

        //将有用的上传数据打包至一个buf,Length是打后的长度。
     StructPackandUnPack.structInt Length = new StructPackandUnPack.structInt();
     byte[] buf = m_structphonesignal.PacketDatatoNewBuf(Length);

     if(buf!=null){
     //try to send packet to PC.
     try {
     Socket sock = new Socket(Dst, 8080,Src,8080);
     OutputStream OPS= sock.getOutputStream();
     OPS.write(buf);
     OPS.flush();
     //waitfor output finished.
     Thread.sleep(1000);
     InputStream INS= sock.getInputStream();
     INS.read(buf);
     Thread.sleep(1000);
     sock.shutdownOutput();
     sock.shutdownInput();
     sock.close();
     }
     catch (UnknownHostException e){
     e.printStackTrace();
     }catch (IOException e){
     e.printStackTrace();    
     }catch (Exception e){
     e.printStackTrace();
     }
     }else{
     //something is wrong.
     }
}

------解决方案--------------------
一秒一次,够浪费的,完全可以设定 10 分钟啊,注意 thread 中要进行电源管理避免休眠,另外就是手机端要有发送失败重发的机制,估计是网络信号问题。
  相关解决方案