实现效果:手机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 中要进行电源管理避免休眠,另外就是手机端要有发送失败重发的机制,估计是网络信号问题。