Итак, дело в том, что я хочу получить Bitmap из абсолютного пути, поэтому я передаю эти пути как ArrayList<Strings>
моему ведущему, где у меня есть следующий фрагмент кода:
private void decodeImageUri(final ArrayList<String> imageUris) {
while(imageCounter < imageUris.size()) {
DecodeBitmapsThreadPool.post(new Runnable() {
@Override
public void run() {
Bitmap bitmap = BitmapFactory.decodeFile(imageUris.get(imageCounter));
mImagesBase64Array.add(bitmapToBase64(bitmap));
}
});
}
DecodeBitmapsThreadPool.finish();
Log.d("SIZE OF BASE64", " ---------- " + mImagesBase64Array.size());
}
И это мой класс ThreadPool:
public class DecodeBitmapsThreadPool {
private static DecodeBitmapsThreadPool mInstance;
private ThreadPoolExecutor mThreadPoolExec;
private static int MAX_POOL_SIZE;
private static final int KEEP_ALIVE = 10;
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>();
public static synchronized void post(Runnable runnable) {
if (mInstance == null) {
mInstance = new DecodeBitmapsThreadPool();
}
mInstance.mThreadPoolExec.execute(runnable);
}
private DecodeBitmapsThreadPool() {
int coreNum = Runtime.getRuntime().availableProcessors();
MAX_POOL_SIZE = coreNum * 2;
mThreadPoolExec = new ThreadPoolExecutor(
coreNum,
MAX_POOL_SIZE,
KEEP_ALIVE,
TimeUnit.SECONDS,
workQueue);
}
public static void finish() {
mInstance.mThreadPoolExec.shutdown();
}
}
Итак, когда я запускаю ThreadPool, похоже, что он попадает в какой-то бесконечный цикл (согласно Logcat), а затем я просто получаю OutOfMemoryException. Интересно, что я делаю неправильно, так как я не могу его отладить. Я просто хочу декодировать растровое изображение в фоновых потоках и создать представление этих растровых изображений base64, чтобы я мог загрузить их на сервер. P.S. Любые идеи, как это можно реализовать с помощью RxJava2? Заранее спасибо!