現(xiàn)在我們知道如何在一個指定I/O調(diào)度器上來調(diào)度一個任務(wù),我們可以修改storeBitmap()函數(shù)并再次檢查StrictMode的不合規(guī)做法。為了這個例子,我們可以在新的blockingStoreBitmap()函數(shù)中重排代碼。
private static void blockingStoreBitmap(Context context, Bitmap bitmap, String filename) {
FileOutputStream fOut = null;
try {
fOut = context.openFileOutput(filename, Context.MODE_PRIVATE);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
fOut.flush();
fOut.close();
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
try {
if (fOut != null) {
fOut.close();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
現(xiàn)在我們可以使用Schedulers.io()創(chuàng)建非阻塞的版本:
public static void storeBitmap(Context context, Bitmap bitmap, String filename) {
Schedulers.io().createWorker().schedule(() -> {
blockingStoreBitmap(context, bitmap, filename);
});
}
每次我們調(diào)用storeBitmap(),RxJava處理創(chuàng)建所有它需要從I / O線程池一個特定的I/ O線程執(zhí)行我們的任務(wù)。所有要執(zhí)行的操作都避免在UI線程執(zhí)行并且我們的App比之前要快上1秒:logcat上也不再有StrictMode的不合規(guī)做法。
下圖展示了我們在storeBitmap()場景看到的兩種方法的不同:
http://wiki.jikexueyuan.com/project/rxjava/images/chapter7_1.png" alt="" />