文章目錄
- 部落格概述
- 狀态量設計
- 狀态量的使用
部落格概述
在一些子產品的開發中,經常用到一些狀态量,對這些狀态量的使用可以用很好的設計子產品的狀态來執行或者拒絕一些操作。在我的一個項目的登入子產品中用到了藍牙和發夾器登入。發夾器子產品就是用到了一個簡單的是否接受序列槽資料的狀态量,如果接受就走解析子產品,如果不接收就拒絕這次的資料。藍牙子產品就相對複雜一些,需要4個狀态量來标示藍牙子產品的狀态。
狀态量設計
private enum Status{
NORMAL(1), //正常
SCANNING(2), //掃描
CONNECTING(3), //連接配接中,
TRY_CONNECTING(4);// 嘗試連接配接
private int value = 0;
private Status(int value) { //必須是private的,否則編譯錯誤
this.value = value;
}
public static Status valueOf(int value) { //手寫的從int到enum的轉換函數
switch (value) {
case 1:
return NORMAL;
case 2:
return SCANNING;
case 3:
return CONNECTING;
case 4:
return TRY_CONNECTING;
default:
return null;
}
}
public int value() {
return this.value;
}
}
設計一個内部類來表示藍牙子產品的狀态。
狀态量的使用
//如果不是嘗試連接配接狀态一律return,包括scanning,nomal,connecting,
if (status != Status.TRY_CONNECTING){
return;
}
//直接連接配接mac位址
connectMAC(mac);
//如果藍牙子產品在掃描狀态,則傳回,否則設定為nomal
if(BleManager.getInstance().getScanSate()== BleScanState.STATE_SCANNING){
return;
}else{
//如果代碼邏輯在掃描狀态,但是藍牙子產品在空閑狀态,則糾正藍牙service為nomal狀态。
if(status == Status.SCANNING){
status = Status.NORMAL;
}
}
//1。針對跳到待機頁面,藍牙還連接配接着的情況的處理辦法。
//2。正常情況下,在已經連接配接了藍牙的情形中,在發出掃描請求,拒絕是對的。
//3。有一種情況,登陸界面掃描到之後,嘗試連接配接,然後又來了一次斷開連接配接,
if (status == Status.CONNECTING){
return;
}
//嘗試連接配接狀态,當然也不執行了
if (status == Status.TRY_CONNECTING){
return;
}