雖然Handler用的地方比較普遍,但是接口也有他的獨特之處,比較直觀,然后降低了耦合性
如有一接口,需要將數據傳給使用的activity中,接口如下
public interface PushValue { void push(byte v,byte v2); }
1:判斷context是否繼承並通知調用接口
if(context instanceof PushValue){ ((PushValue)context).push((byte)(crc16&0xff),(byte) ((0xff00 & crc16) >> 8)); }
這時只需要在數據傳遞處強制轉換這個接口並調用,然后在使用處(比如Activity中 implements這個接口並實現其push方法即可)
@Override public void push(byte v,byte v2) { tvCrcResult.setText(""); tvCrcResult.setText(ConvertHexByteToString(v)+" "+ConvertHexByteToString(v2)); }
2:setCallBack的方式
1方法你會發現我們需要給數據源傳context這個值,然而傳了之后代碼的耦合性就變強了,所以第二種方法解決了此麻煩
private PushValue pushValue ; public void setPushValueCallBack(PushValue pushValueCallBack){ this.pushValue = pushValueCallBack; }
先聲明接口在建立一個set方法,作用是將外部即將實例化的接口傳進來,然后直接在數據源產生處調用 接口內方法即可
pushValue.push((byte)(crc16&0xff),(byte) ((0xff00 & crc16) >> 8));
外部實例了使用setPushValueCallBack這個方法的類之后,直接調用setPushValueCallBack方法即可
new xxx類.setPushValueCallBack(new Crc16.PushValue() { @Override public void push(byte v, byte v2) { //執行相關操作即可 } });
這個是仿照Android綁定點擊監聽器寫的,這個也是類似於監聽器,數據源有數據傳過來,使用的地方將會監聽到變化然后執行相應操作
接口和Handler有什么區別?
調用Handler系統是會將你的Handler放在主線程中去執行的,然而我們調用的接口卻還是在原本的線程中運行