diff --git a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSlider.java b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSlider.java index 19808941..36c9fba2 100644 --- a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSlider.java +++ b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSlider.java @@ -280,33 +280,38 @@ private double getStepValue() { private BitmapDrawable getBitmapDrawable(final String uri) { BitmapDrawable bitmapDrawable = null; ExecutorService executorService = Executors.newSingleThreadExecutor(); - Future future = executorService.submit(new Callable() { - @Override - public BitmapDrawable call() { - BitmapDrawable bitmapDrawable = null; - try { - Bitmap bitmap = null; - if (uri.startsWith("http://") || uri.startsWith("https://") || - uri.startsWith("file://") || uri.startsWith("asset://") || uri.startsWith("data:")) { - bitmap = BitmapFactory.decodeStream(new URL(uri).openStream()); - } else { - int drawableId = getResources() - .getIdentifier(uri, "drawable", getContext() - .getPackageName()); - bitmap = BitmapFactory.decodeResource(getResources(), drawableId); + try { + Future future = executorService.submit(new Callable() { + @Override + public BitmapDrawable call() { + BitmapDrawable bitmapDrawable = null; + try { + Bitmap bitmap = null; + if (uri.startsWith("http://") || uri.startsWith("https://") || + uri.startsWith("file://") || uri.startsWith("asset://") || uri.startsWith("data:")) { + bitmap = BitmapFactory.decodeStream(new URL(uri).openStream()); + } else { + int drawableId = getResources() + .getIdentifier(uri, "drawable", getContext() + .getPackageName()); + bitmap = BitmapFactory.decodeResource(getResources(), drawableId); + } + + bitmapDrawable = new BitmapDrawable(getResources(), bitmap); + } catch (Exception e) { + e.printStackTrace(); } - - bitmapDrawable = new BitmapDrawable(getResources(), bitmap); - } catch (Exception e) { - e.printStackTrace(); + return bitmapDrawable; } - return bitmapDrawable; + }); + try { + bitmapDrawable = future.get(); + } catch (Exception e) { + e.printStackTrace(); } - }); - try { - bitmapDrawable = future.get(); - } catch (Exception e) { - e.printStackTrace(); + } finally { + // Without this, every call leaks the worker thread for the lifetime of the process. + executorService.shutdown(); } return bitmapDrawable; }