我要替换此功能:
private void transmit(){
final Handler mHandler = new Handler();
Toast.makeText(this, "Wait for the connection to stablish",Toast.LENGTH_LONG).show();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
//Log.d("BtSending", "run: Sending..");
mBluetoothLeService.writeCharacteristic(superString,bluetoothGattCharacteristicHM_10);
mHandler.postDelayed(this,250);
}
},1000);
}
对于一些更漂亮的东西,它工作得很好,但是一个朋友告诉我,有一种更有效的方法来做,但是我不记得他告诉我了什么。请帮助我,谢谢。
答案 0 :(得分:0)
处理程序是快速连续运行重复操作的推荐方法。不过,这并不意味着您不能使代码更加整洁。
private final int MSG_TRANSMIT = 100;
private TransmitHandler handler = new TransmitHandler();
private void transmit() {
//...
handler.sendInitialTransmit();
}
public class TransmitHandler extends Handler {
public TransmitHandler() {
super(Looper.getMainLooper());
}
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_TRANSMIT:
mBluetoothLeService.writeCharacteristic(superString,bluetoothGattCharacteristicHM_10);
if (shouldTransmit) sendTransmit(); //shouldTransmit is an arbitrary boolean so you can stop the loop when needed
break;
}
}
public void sendInitialTransmit() {
sendEmptyMessageAtTime(MSG_TRANSMIT, SystemClock.uptimeMillis() + 1000);
}
public void sendTransmit() {
sendEmptyMessageAtTime(MSG_TRANSMIT, SystemClock.uptimeMillis() + 250); //where 250 is your delay
}
public void cancelTransmit() {
removeMessages(MSG_TRANSMIT); //if MSG_TRANSMIT is currently queued to be executed, calling cancelTrasmit() will remove it from the queue
}
}