Android我的代码rxjava运行缓慢

时间:2017-09-13 10:38:43

标签: android rx-java intentservice

在我的应用程序中,有一种通过API获取数据的方法。它在IntentService中执行。接收的数据将写入数据库。我在rxjava的帮助下重写了这个方法,但是执行时间大大增加了。 这是我在IntentService中的代码

Call<List<DocLine>> DocLineResult = mApi.getDocLine(UserID, LastUserDate);
Response<List<DocLine>> responseDocLine = DocLineResult.execute();
if (responseDocLine.isSuccessful()) {
    List<DocLine> docLines = responseDocLine.body();
    if (docLines != null) {
        for (DocLine item : docLines) {
            mContents = new ContentValues();
            //filling mContents from item
            dbBase.insertWithOnConflict(dbTabName, null, mContents, SQLiteDatabase.CONFLICT_REPLACE);
        }
        Log.d(AppGlobal.LOG_TAG, dbTabName + " => " + docLines.size());
    }
}
else {
    if (responseDocHead.raw() != null && responseDocHead.raw().code() == 404) {
        throw new Exception(getString(R.string.error_null_user));
    else
        throw new Exception("Error");
    }
}

这是我的代码rxjava

Observable oDocLine = apiService.getDocLine(userId, lastSyncDate)
            .flatMap(Observable::from)
            .flatMap(docLine -> Observable.create(subscriber -> {workDB.save(docLine, null); subscriber.onCompleted();})
            .subscribeOn(Schedulers.io()));

1 个答案:

答案 0 :(得分:0)

除了添加副作用外,第二个flatmap似乎没有用处。

Observable oDocLine = apiService.getDocLine(userId, lastSyncDate)
            .flatMap(Observable::from)            
            .subscribeOn(Schedulers.io())
            .observeOn(Schedulers.io())
            .subscribe(docLine -> workDB.save(docLine, null));

应该希望更有效率。