package pl.droidsonroids.gif; /** * Runnable for {@link java.util.concurrent.Executor} which propagates exceptions to default uncaught * exception handler. */ abstract class SafeRunnable implements Runnable { final GifDrawable mGifDrawable; SafeRunnable(GifDrawable gifDrawable) { mGifDrawable = gifDrawable; } @Override public final void run() { try { if (!mGifDrawable.isRecycled()) { doWork(); } } catch (Throwable throwable) { final Thread.UncaughtExceptionHandler uncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler(); if (uncaughtExceptionHandler != null) { uncaughtExceptionHandler.uncaughtException(Thread.currentThread(), throwable); } throw throwable; } } abstract void doWork(); }