1分鐘掌握 ViaBus 架構的使用
版權宣告:本文為博主原創文章,轉載請註明作者和連結。更多請繼續關注 KunMinX
ofollow,noindex">https://www.jianshu.com/p/6545767d3e54
viabus_flow.png
0. 在模組的 build.gradle 新增如下依賴
implementation "com.kunminx.viabus:viabus-android:0.3.3"
1. 定義介面,用於傳送請求。
介面須繼承於 IRequest,如:
public interface INoteRequest extends IRequest{ void queryList(); void insert(NoteBean bean); ... }
2. 定義 bus,用於支援請求介面的訪問。
bus 須繼承於BaseBus,如:
public class NoteBus extends BaseBus { public static INoteRequest note() { return (INoteRequest) getRequest(INoteRequest.class); } ... }

viabus_view_bus_business_1.png
3. 將 ui 註冊成為響應接收者。
在 ui 中,通過 bus 傳送資料請求。並在 onResult 中,依據響應碼實現 ui 邏輯的處理。
public class NoteListFragment extends Fragment implements IResponse { @Override public void onCreate(@Nullable Bundle savedInstanceState) { ... NoteBus.registerResponseObserver(this); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { ... NoteBus.note().queryList(); } @Override public void onResult(Result testResult) { String resultCode = (String) testResult.getResultCode(); switch (resultCode) { case NoteResultCode.QUERY_LIST: if (testResult.getResultObject() != null) { mAdapter.setList((List<NoteBean>) testResult.getResultObject()); mAdapter.notifyDataSetChanged(); } break; case NoteResultCode.INSERTED: ... } } @Override public void onDestroy() { ... NoteBus.unregisterResponseObserver(this); } }
4. 在模組的管理類中,將 業務 註冊成為請求處理者。
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { NoteBusiness noteBusiness = new NoteBusiness(); noteBusiness.init(getApplicationContext()); NoteBus.registerRequestHandler(noteBusiness); ... } }
5. 在業務中非同步處理各種請求。
期間可傳送進度訊息,最後可返回結果資料。業務須繼承於 BaseBusiness。
public class NoteBusiness extends BaseBusiness<NoteBus> implements INoteRequest { @Override public void queryList() { handleRequest((e) -> { List<NoteBean> list = mDataBase.getList(null, null); ... sendMessage(e, new Result(NoteResultCode.PROGRESS, bean.getId())); ... return new Result(NoteResultCode.QUERY_LIST, list); }); } @Override public void insert(NoteBean bean) { handleRequest((e) -> { ... }); } ... }