【Android】小白进阶之如何为产品设计超时监控机制
发布日期:2021-05-08 10:09:24 浏览次数:24 分类:原创文章

本文共 1953 字,大约阅读时间需要 6 分钟。

1、背景:

数据交互或设备操作如果处理不合适就不可避免要遇到异常,增加超时监控机制以便于对异常的及时处理。

2、定义 Handler

private Handler mHandler = new Handler();

3、定义线程

private Runnable mTimeOutRunnable = new Runnable() {		@Override		public void run() {			/* 超时处理 */		}};

4、设置超时检测时间

mHandler.postDelayed( mTimeOutRunnable, 1 * 1000 ); // 超时检测时间 1s

5、取消超时回调函数

mHandler.removeCallbacks( mTimeOutRunnable );

6、示例

以笔者最近负责的 CC2541 BLE 为例 

a、BLE 扫描过程属于高耗电过程,以华为手机为例(扫描过程信号明显弱于连接后信号),因此规定时间未扫描到设备需要停止扫描。

// 启动延时任务 mHandler.postDelayed(new Runnable() { 	@Override 	public void run() { 		mBluetoothAdapter.stopLeScan(mLeScanCallback);  // 停止扫描 	} }, 1000*5);  // 5s 未扫描到设备就停止// 开始扫描 mBluetoothAdapter.startLeScan(mLeScanCallback); 

b、连接设备时的超时处理

扫描到设备后急需要连接操作,也需要做好超时检测:

// 启动线程private Runnable mConnTimeOutRunnable = new Runnable() { 	@Override 	public void run() { 		disconnect(); // 资源释放 		close(); 	} }; // 5s 延时检测 mHandler.postDelayed(mConnTimeOutRunnable, 5*1000); mHandler.postDelayed(new Runnable() { 	@Override 	public void run() { 		// 连接设备 		mBluetoothGatt = device.connectGatt(BleCommService.this, false, mGattCallback); 	} }, 100); // 删除回调函数mHandler.removeCallbacks(mConnTimeOutRunnable);

c、通讯中的等待回复超时

超时后可以考虑重发机制的设计或丢弃数据

// 发送数据mTxCharacteristic.setValue(data); mBluetoothGatt.writeCharacteristic(mTxCharacteristic); // 延时检测mHandler.postDelayed(mClearMsgRunnable, 1000*5); // 接收消息超时处理,通知所有listener超时并清空消息队列 private Runnable mClearMsgRunnable = new Runnable() { 	@Override 	public void run() { 		List list = MsgReqListMgr.getInstance().getListeners(); 		if (list.size() > 0) { 			Iterator iterator = list.iterator(); 			while (iterator.hasNext()) { 				MsgListener msg = iterator.next(); 				msg.mListener.onFailed(MsgErrCode.ERR_TIME_OUT); 			} 			ThreadMgr.getInstance().removeAll(); 			MsgReqListMgr.getInstance().clear(); 		} 		MsgReqListMgr.getInstance().clear(); 	} }; // 处理完 ACK 数据后删除mHandler.removeCallbacks(mClearMsgRunnable); 

 

refer:

https://blog.csdn.net/wujian946110509/article/details/53406219

 

上一篇:【Android】小白进阶之如何保证service不被杀死和如何结束线程基础浅析
下一篇:【企业】走近华为,微观世界

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月05日 23时04分12秒