viabus_flow.png版权声明:本文为博主原创文章,转载请注明作者和链接。更多请继续关注 KunMinX
https://www.jianshu.com/p/6545767d3e54
⭐ ViaBus 架构已在 Github 开源,欢迎 Star & Fork ~
Github : KunMinX / android-viabus-architecture
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) -> { ... });
}
...
}
更多文章
Github : KunMinX / android-viabus-architecture
Android 各类架构横向对比
ViaBus - 年轻人的第一款 Android 架构
网友评论