統一管理專案中的介面回撥
0、寫在前面
無論是 Java Web 開發還是 Android 開發我們都避免不了非同步處理業務的邏輯。有非同步的出現一定就有非同步結果(介面)的回撥。你之前是不是有為每一個非同步業務都單獨寫一個介面呢?如果沒有單獨寫,可以忽略此篇文件。(你已經是大佬了)
專案(業務)大(複雜)了是不是覺得介面太多難以管理呢?本篇文章就是為了解決此問題。
1、封裝全域性的回撥介面
涉及到的姿勢
1、泛型靈活使用
2、執行緒安全的單例模式
3、WeakHashMap 弱鍵值對引用快取回撥介面
/**
* 非同步回撥(結果)介面
*/
public interface IGlobalCallback<T> {
void executeCallback(@Nullable T args);
}
/**
* 統一管理專案中的回撥
*/
public class CallbackManager {
private static final WeakHashMap<Object, IGlobalCallback> CALLBACKS = new WeakHashMap<>();
/**
* 靜態類部類實現單例
*/
private static class Holder {
private static final CallbackManager INSTANCE = new CallbackManager();
}
public static CallbackManager getInstance() {
return Holder.INSTANCE;
}
/**
* 新增全域性回撥
* @param tag
* @param callback
* @return
*/
public CallbackManager addCallback(Object tag, IGlobalCallback callback) {
CALLBACKS.put(tag, callback);
return this;
}
/**
* 獲取指定回撥的介面
* @param tag
* @return
*/
public IGlobalCallback getCallback(Object tag) {
return CALLBACKS.get(tag);
}
}
/**
* 回撥Key的列舉,方便存取回撥介面
*/
public enum CallbackType {
WX_PAY,
ALI_PAY
}
2、測試介面回撥
@OnClick(R.id.id_icon_ib)
void iconButton(){
Toast.makeText(getApplicationContext(), "iconButton", Toast.LENGTH_SHORT).show();
//先全域性CallbackManager中新增回撥
CallbackManager.getInstance().addCallback(CallbackType.WX_PAY, new IGlobalCallback<String>() {
@Override
public void executeCallback(@Nullable String args) {
Toast.makeText(getApplicationContext(), args, Toast.LENGTH_SHORT).show();
}
});
//延遲傳送訊息模擬非同步耗時操作
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
IGlobalCallback callback = CallbackManager.getInstance().getCallback(CallbackType.WX_PAY);
if (callback !=null){
callback.executeCallback("微信支付測試回撥");
}
}
},3000);
}
更過多好玩炫酷的封裝參考視訊:http://coding.imooc.com/class/116.html
推薦閱讀
android-iconify 使用詳解
10分鐘用Jitpack釋出開源庫
微信、支付寶App支付
IJPay讓支付觸手可及
相關文章
- 微博回撥介面
- java介面回撥Java
- 介面返回前回撥
- AndroidAdapter回撥介面AndroidAPT
- java 介面回撥經典案例--網路請求回撥Java
- 聊一聊Vue中的回撥函式Vue函式
- MIS系統開發中的專案管理(一)(轉)專案管理
- 專案管理系統中的任務和專案專案管理
- js中的回撥函式JS函式
- JavaScript中回撥的示例理解JavaScript
- WCF中的非同步回撥非同步
- [iOS] [OC] 關於block回撥、高階函式“回撥再呼叫”及專案實踐iOSBloC函式
- Java介面回撥機制詳解Java
- 專案多,微信授權回撥地址來回變怎麼辦?
- CRM中的專案管理:搭建CRM與專案一體化管理專案管理
- 回撥函式的理解(一)函式
- ajax中回撥的幾個坑
- js 中的submit 回撥函式JSMIT函式
- 也談 Android 中的回撥Android
- python中的回撥函式Python函式
- C++中的回撥函式C++函式
- 一個Demo帶你理解Android介面回撥機制Android
- 介面回撥的原理:介面變數 呼叫 被類實現的介面的方法變數
- vue專案api介面管理VueAPI
- cocos2dx打飛機專案筆記七:各種回撥:定時器schedule、普通回撥callFunc、選單回撥menu_selector、事件回撥event_selector...筆記定時器事件
- Objective-C中的Block回撥模式ObjectBloC模式
- Java中的閉包(Closure)和回撥Java
- Java_介面回撥與匿名內部類Java
- Activity生命週期回撥是如何被回撥的?
- 專案管理中各系統之間的關係專案管理
- MIS系統開發中的專案管理(轉)專案管理
- 傳統專案管理VS敏捷專案管理專案管理敏捷
- 關於 js 中的回撥函式 callbackJS函式
- java高階用法之:JNA中的回撥Java
- 初步講解JS中的callback回撥原理JS
- 理解javascript中的回撥函式(callback)【轉】JavaScript函式
- JavaScript 中回撥地獄的今生前世JavaScript
- [JS]回撥函式和回撥地獄JS函式