[英]Android Timer instead of Thread.sleep for sending binary code via LED
我正在開發一個應用程序,用於通過打開/關閉智能手機的LED來傳輸二進制代碼。 在for循環中,應用程序從二進制代碼的char變為char,如果有一個“ 1”,它將使LED閃爍100毫秒;如果有一個“ 0”,則它會熄滅100ms。 二進制代碼也被發送了3次。 這是我使用的部分代碼:
public void turnOnOff() {
if (button) {
button = false;
Camera.Parameters parametersOn = camera.getParameters();
Camera.Parameters parametersOff = parameters;
parametersOn.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
parametersOff.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
try {
for (int a = 0; a < 3; a++){
for (int i = 0; i < data.length(); i++){
if (data.charAt(i) == '1') {
camera.setParameters(parametersOn);
camera.startPreview();
Thread.sleep(100);
} else {
camera.setParameters(parametersOff);
camera.startPreview();
Thread.sleep(100);
}
}
}
} catch (Exception e) {
}
}
button = true;
}
它確實可以工作,但是不幸的是Thread.sleep()函數在時間上不是很精確。 當我輸入Thread.sleep(100)時,它總是超過100ms。 所以我嘗試更改代碼,並使用帶有timer.schedule()方法的計時器,因為我希望它更准確。 但我只是不知道如何使它與計時器一起工作。
有人可以告訴我如何使此任務與計時器一起使用,以便“ 1”和“ 0”以100ms的間隔發送並重復3次嗎?
Thread.sleep導致您當前的Thread睡眠至少100ms 。 這並不意味着您將在100毫秒內執行下一條語句。 Timer使用另一個線程,因此,如果需要在UI線程上執行某些操作,則必須將消息發布到UI線程。 如果您需要延遲消息而不阻塞UI線程-請使用Handler.post消息:
Handler handler = new Handler();
try {
for (int a = 1; a <= 3; a++) {
for (int i = 0; i < data.length(); i++) {
if (data.charAt(i) == '1') {
handler.postDelayed(new Runnable() {
@Override public void run() {
camera.setParameters(parametersOn);
camera.startPreview();
}
}, i * 100);
} else {
handler.postDelayed(new Runnable() {
@Override public void run() {
camera.setParameters(parametersOff);
camera.startPreview();
}
}, i * 100);
}
}
}
} catch (Exception e) {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.