问题描述:我现在在做一个蓝牙通信的东西,现在要求如果数据接收超时,则在界面上显示相关的提示。因为安卓的BluetoothSocket里没有Socket中的setSoTimeout方法来判断,所以我的做法是用一个timer做为线程,timer每秒运行。在收到完整帧的时候(程序中有帧检测的功能),得到系统时间,然后在timer中的run中得到当前系统时间和完整帧的时间对比,超时5s则刷新界面。现在测试的情况是,在程序运行半个小时左右的时候,会跳出程序,然后后台收集到的错误是out of memory。我试过在各个地方加System.gc(),但没有效果,系统不理睬,没有回收垃圾,照样会out of memory。
另外,为什么我用timer做线程,但是却用系统设计来判断超时,而没有直接用timer呢?这是因为,我本来用timer来实现定时判断,但是发现记时在多次接收超时后会不准确...无奈之下,只能用系统时间来判断,关于这点,有高手知道的,也请加以指点!
求高手指教!万谢!
另外,为什么我用timer做线程,但是却用系统设计来判断超时,而没有直接用timer呢?这是因为,我本来用timer来实现定时判断,但是发现记时在多次接收超时后会不准确...无奈之下,只能用系统时间来判断,关于这点,有高手知道的,也请加以指点!
求高手指教!万谢!
解决方案 »
- android在list view中如何action的实现
- 为什么Toast 会报错啊,是不是那里写错了
- android apk自动升级之后安装完成 打开崩溃时怎么回事
- 问个基础问题关于ONCREAT
- activity之间传bitmap过大就出问题
- android问题···急
- android 点击对话框以外的区域 对话框关闭
- Android音频传输、接收与播放遇到的问题,恳请大牛支招。
- 【android高手们是怎么把android软件发到GM上的】
- 如何修改 Android 系统 配置文件
- Android background问题 求帮助
- 下载好了android SDK 但是连接真手机,打开hierarchyviewer.bat,手机屏幕图像显示倒立
2、timeout本来就得你自己做,socket有timeout是API封装了而已。得自己做个watch dog判断超时。至于多次接受超时后不准确,肯定是你代码有问题。我猜测是你计时的方式不对,估计你在timer中用的是增量而不是快照来对时。简单的说,就是如果你想计算是否到达5秒,那么你应该在开始前用当前的时间加上5秒算出结束时间,然后在每一个ticket(onTimer)中去判断时间是否超时,或者在每一次onTimer的时候计算时间间隔并累加,而不是说定时器设置1秒执行一次,然后在回调中每次加1秒。