关于Handler API hasMessages()的用法

有时候在项目中希望用Handler发送一个消息后,等消息处理完再发送相同消息就需要用的hasMessages()的方法

例如:

public class MainActivity extends Activity {

	private int MSG_ID = 100;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		MSG_ID = 100;
		init();
	}
	
	private Handler mHandler = new Handler(){
		public void handleMessage(android.os.Message msg) {
			//1.处理主线程逻辑
			//2.删除消息队列中的
			mHandler.removeMessages(msg.what);
			Log.i("dg", "msg >>> "+ msg.what +" >>> 接收到消息,处理完逻辑后,删除消息");
		};
	};
	
	private void init() {
		new Thread(){
			@Override
			public void run() {
				super.run();
				
				for (int i = 0; i < 10; i++) {
					Message msg = mHandler.obtainMessage();
					msg.what = MSG_ID;
					
					Log.i("dg", "msg.what >>> "+msg.what +" >>> "+mHandler.hasMessages(msg.what));
					
					if(!mHandler.hasMessages(msg.what)){
						mHandler.sendEmptyMessageDelayed(msg.what, 100);
						Log.i("dg", "发送一次消息");
					}
					
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}.start();
		
	}


}



log信息如下:


10-12 17:32:18.937: I/dg(23005): msg.what >>> 100 >>> false
10-12 17:32:18.937: I/dg(23005): 发送一次消息
10-12 17:32:19.037: I/dg(23005): msg.what >>> 100 >>> true
10-12 17:32:19.037: I/dg(23005): msg >>> 100 >>> 接收到消息,处理完逻辑后,删除消息
10-12 17:32:19.137: I/dg(23005): msg.what >>> 100 >>> false
10-12 17:32:19.137: I/dg(23005): 发送一次消息
10-12 17:32:19.237: I/dg(23005): msg.what >>> 100 >>> true
10-12 17:32:19.237: I/dg(23005): msg >>> 100 >>> 接收到消息,处理完逻辑后,删除消息
10-12 17:32:19.337: I/dg(23005): msg.what >>> 100 >>> false
10-12 17:32:19.337: I/dg(23005): 发送一次消息
10-12 17:32:19.437: I/dg(23005): msg >>> 100 >>> 接收到消息,处理完逻辑后,删除消息
10-12 17:32:19.437: I/dg(23005): msg.what >>> 100 >>> false
10-12 17:32:19.437: I/dg(23005): 发送一次消息
10-12 17:32:19.537: I/dg(23005): msg >>> 100 >>> 接收到消息,处理完逻辑后,删除消息
10-12 17:32:19.537: I/dg(23005): msg.what >>> 100 >>> false
10-12 17:32:19.537: I/dg(23005): 发送一次消息
10-12 17:32:19.637: I/dg(23005): msg >>> 100 >>> 接收到消息,处理完逻辑后,删除消息
10-12 17:32:19.637: I/dg(23005): msg.what >>> 100 >>> false
10-12 17:32:19.647: I/dg(23005): 发送一次消息
10-12 17:32:19.747: I/dg(23005): msg >>> 100 >>> 接收到消息,处理完逻辑后,删除消息
10-12 17:32:19.747: I/dg(23005): msg.what >>> 100 >>> false
10-12 17:32:19.747: I/dg(23005): 发送一次消息
10-12 17:32:19.847: I/dg(23005): msg >>> 100 >>> 接收到消息,处理完逻辑后,删除消息
10-12 17:32:19.847: I/dg(23005): msg.what >>> 100 >>> false
10-12 17:32:19.847: I/dg(23005): 发送一次消息
10-12 17:32:19.947: I/dg(23005): msg >>> 100 >>> 接收到消息,处理完逻辑后,删除消息


  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值