有时候在项目中希望用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): 发送一次消息
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 >>> 接收到消息,处理完逻辑后,删除消息