Get rid of your AdListener.
You never want to display an interstitial ad as soon as it has been received, nor your custom one as soon as the interstitial cannot be served.
Instead call #displayInterstitial at a natural break point in your app. This will ensure that you either show an interstitial or show your custom ad. And you won't get it displaying when your Activity has been destroyed.
The other approach you could take is to setup an inhouse ad and set that as the fallback option in your mediation flow. But I have never attempted to make that happen. And besides you wanted this to work even when the user was offline, so top approach is best.