超时方法
//超时
Timer timer;
class MyTimerTask extends TimerTask{
@Override
public void run() {
handler.sendEmptyMessage(0);
}
}
private static void checkTimeOut(){
try{
timer = new Timer();
MyTimerTask task = new MyTimerTask();
timer.schedule(task, 800); //如等待800ms,无停止时间操作则记为超时
}catch(Exception e){
Log.e("--------", e.getMessage());
}
}
Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch(msg.what){
case 0:
//关闭计时
timer.cancel();
//执行操作
... ...
break;
}
};
};
使用场景
此方法为会阻塞,size = mInputStream.read(buffer);
- 当有数据读到时,则 size > 0
- 读取失败时或读取完毕,则 size < 0
- 还有一种情况是,啥也读取不到时,会一直堵塞不执行也不退出,这时就需要设置超时时,执行退出
使用时,checkTimeOut()放在read()前
//设置超时
checkTimeOut();
size = mInputStream.read(buffer);
Log.d("---------", "size-----" +size);
byte []receviceData = new byte[size];
System.arraycopy(buffer,0,receviceData,0,size);
if (size > 0) {
Log.d("---------", "recevice message,length = " + size);
Message message = new Message();
message.what = 0;
message.obj = receviceData;
mHandler.sendMessage(message)
handler.sendEmptyMessage(1);
}