【发布时间】:2017-01-18 05:41:51
【问题描述】:
我是 RxJava 新手。我有一个 bitmapObservable 用于下载图像 url 列表并将其转换为位图的简单网络操作。
mSubscription = Observable.create(new Observable.OnSubscribe<Bitmap[]>() {
@Override
public void call(final Subscriber<? super Bitmap[]> subscriber) {
String[] urls = new String[]{
"http://www.convertimage.net/frontframe/images/cute_ball_info.png",
"http://customerserviceai.com/wp-content/uploads/2016/08/waiting.png",
"https://images.google.com/images/branding/googleg/1x/googleg_standard_color_128dp.png"};
Bitmap[] bitmaps = new Bitmap[urls.length];
int i = 0;
for (String url : urls) {
final Bitmap bitmap = Downloader.getBitmapFromURL(url);
if (bitmap == null) {
subscriber.onError(new IOException());
} else {
bitmaps[i++] = bitmap;
Log.d(TAG, "Bitmap " + url + " downloaded" + bitmap);
}
}
subscriber.onNext(bitmaps);
subscriber.onCompleted();
}
}).subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<Bitmap[]>() {
@Override
public void onCompleted() {
Log.d(TAG, "Everything completed");
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "Some error has been occured");
}
@Override
public void onNext(Bitmap[] bitmaps) {
Log.d(TAG, "Downloaded bitmaps " + bitmaps);
}
});
在活动的onDestroy 上,我取消订阅 observable 以避免内存泄漏。
@Override
protected void onDestroy() {
mSubscription.unsubscribe();
super.onDestroy();
}
我可以看到,如果我在图像下载过程中退出活动,后台任务也会被杀死。我只想继续背景任务,即使我已经取消了观察者的订阅。是否可以?
【问题讨论】:
-
如果你取消订阅你的 observable,你不能这样做
标签: android rx-java rx-android