我试图了解观察者模式在Android中的运作方式。
我已创建此方法来加载对象的样本列表,将每个项目推送到订阅者并将其加载到recyclerview中。
我不明白为什么如果我加载10件物品一切正常,但如果我加载100/1000或一般更多物品,则recyclerView为空且onNext,onComplete不会被触发。
private Observable<AppInfo> getAppList() {
return Observable.create(new Observable.OnSubscribe<AppInfo>() {
@Override
public void call(Subscriber<? super AppInfo> subscriber) {
for (int i = 0; i<10; i++){
AppInfo appInfo = new AppInfo(
"Test item "+i,
ContextCompat.getDrawable(getApplicationContext(), R.mipmap.ic_launcher),
i
);
subscriber.onNext(appInfo);
}
if (!subscriber.isUnsubscribed()) {
subscriber.onCompleted();
}
}
});
}
这就是我使用Observable的方式:
Observable<AppInfo> appInfoObserver = getAppList();
appInfoObserver
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<AppInfo>() {
@Override
public void onCompleted() {
Toast.makeText(getApplicationContext(), "App List Load Completed!", Toast.LENGTH_LONG).show();
}
@Override
public void onError(Throwable e) {}
@Override
public void onNext(AppInfo appInfo) {
if(mAppInfoList != null){
mAppInfoList.add(appInfo);
adapter.notifyItemInserted(appInfo.getAppPosition());
}
}
});
感谢您的帮助和建议。
答案 0 :(得分:1)
也许你的代码很重,并且它的加载同步。尝试在新线程中加载你的代码,也许你可以使用observeOn()(我不确切地知道rxjava是如何工作的,但我的猜测是这个函数定义了事件发生的线程)。