【发布时间】:2016-02-15 16:40:48
【问题描述】:
我正在阅读一本名为“RxJava Essentials”的书。以下代码来自那里。我做了一点修改。
我在Activity 中的OnCreate 中调用了refreshList()。并且subscriber.onNext() 已在getApps() 中多次调用,subscriber.onCompleted() 已被调用。之后,onNext callbak(在refreshList() 中实现)被调用。 public void onNext(List<AppInfo> appInfos)
我徘徊为什么subscriber.onNext()实际调用时不调用onNext()回调?为什么后来被调用了?
void refreshList()
{
getApps().toSortedList()
.subscribe(new Observer<List<AppInfo>>()
{
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted()");
}
@Override
public void onError(Throwable te) {
Log.e(TAG, "onError()");
}
@Override
public void onNext(List<AppInfo> appInfos) {
Log.e(TAG, "onNext()");
for (AppInfo tmpInfo : appInfos)
{
//tmpInfo.toString();
Log.e(TAG, String.format("tmpInfo = %s", tmpInfo.toString()));
}
}
});
}
private Observable<AppInfo> getApps()
{
return Observable.create(subscriber ->
{
List<AppInfoRich> apps = new ArrayList<>();
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> infos = getPackageManager().queryIntentActivities(mainIntent, 0);
for (ResolveInfo info : infos)
{
apps.add(new AppInfoRich(this, info));
}
for (AppInfoRich appInfo : apps)
{
Bitmap icon = BitmapUtils.drawableToBitmap(appInfo.getIcon());
String name = appInfo.getName();
String iconPath = mFilesDir + "/" + name;
//BitmapUtils.storeBitmap(App.instance, icon, name);
BitmapUtils.storeBitmap(getApplicationContext(), icon, name);
if(subscriber.isUnsubscribed())
{
return;
}
subscriber.onNext(new AppInfo(name, iconPath, appInfo.getLastUpdateTime()));
}
if( !subscriber.isUnsubscribed())
{
subscriber.onCompleted();
}
});
}
【问题讨论】: