sealtalk / sealtalk-android

RongCloud Android SDK Demo

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NetworkBoundResource 中fetchFromNetwork方法实现逻辑是不是有问题

wrrgit opened this issue · comments

               `threadManager.runOnWorkThread(() -> {
                // 保存网络请求结果至数据库
                try {
                    saveCallResult(processResponse(response));
                } catch (Exception e) {
                    SLog.e(LogTag.DB, "saveCallResult failed:" + e.toString());
                }

                threadManager.runOnUIThread(() ->
                        // 重新从数据库中获取结果,防止从旧数据源中获取到加载网络前的数据

                        result.addSource(safeLoadFromDb(),
                                newData -> setValue(Resource.success(newData)))
                );
            });`

runOnWorkThread 方法和runOnUIThread方法是同时进行的,怎么保证在主线程中查数据库的时候,子线程已经把网络请求结果都写到数据库里了?是不是换成下面的实现比较好,将runOnUIThread放到runOnWorkThread内部
`threadManager.runOnWorkThread(() -> {
// 保存网络请求结果至数据库
try {
saveCallResult(processResponse(response));
threadManager.runOnUIThread(() ->
// 重新从数据库中获取结果,防止从旧数据源中获取到加载网络前的数据

                        result.addSource(safeLoadFromDb(),
                                newData -> setValue(Resource.success(newData)))
                );
                } catch (Exception e) {
                    SLog.e(LogTag.DB, "saveCallResult failed:" + e.toString());
                }
            });`

没看懂 这个放到try外面和里面有啥区别