android回撥機制的淺談
阿新 • • 發佈:2019-01-31
之前在其他語言看到函式指標的時候整個人都大為驚豔,怎麼可以這麼簡單.把方法作為一個引數傳遞到另一個方法然後在處理完邏輯之後直接呼叫這個方法來形成回撥。而可惜我大java竟然不支援。
又是一句how to play。
沒有函式指標沒關係,我們引入callback來實現他
既然要談回撥,那我們就來簡單說下什麼是回撥。
最簡單的一個例子,我們在銀行和去一些餐廳吃飯的時候第一件事就是去領號,而不像買火車票一樣要站在那裡拍著長長的隊,我們可以坐在一邊靜靜地等待著叫到我們的號。
你可以認為我們就是等待被執行的方法,而在那裡排長隊就是主執行緒柱塞在那裡等待,常規方法是我們需要開啟一條執行緒來執行。然後線上程執行完畢後通過hanlder來執行。
但是後多時候我們的邏輯處理會放在專門的工具類來執行。這就增加了難度。這個時候回撥就完美解決了這個問題。
其實你在寫android的時候天天都在用回撥。生命週期的相關方法就可以認為是底層有一個處理生命週期的狀態機,當狀態機處理到相應的生命週期的時候回調了對應的方法。已經所有的監聽器都是同一個道理。這些都是系統寫好了的回撥。
說了這麼多,我們一起來看看callback要怎麼實現吧。
在這裡我們寫個最簡單的回撥的例子。(http請求)
public interface HttpCallback {
public void onResult(int code, Object data); //請求網路成功
public void onNetError(int code,Object data); //網路異常
public void onFinish(); //請求結束(無論成功和失敗)
}
程式碼很簡單,一個介面三個方法就實現了一個callback
我們接下來看看callback的邏輯
假設我現在有個httpUtil.getData()是一個封裝好了的獲取網路請求的辦法。
String data= httpUtil.getData();
//這裡可以先判斷下http的狀態碼
if(data!=null)
{
//網路請求成功
callback.onResult(0,data);
}
else
{
callback.onNetError(-1,null);
}
callback.onFinish();
//執行完成
我們就很簡單的實現了一個callback
HttpCallback callback = new HttpCallback()
{
public void onResult(int code, Object data)
{
//請求網路成功的處理邏輯
}
public void onNetError(int code,Object data)
{
//網路異常的處理邏輯
}
public void onFinish()
{
//公用邏輯
}
};
httpUtil.getData(callback);
我們只要在上層邏輯實現這個callback的方法然後將callback傳給下一層就好。
callback的淺談到此結束。