Skip to content

Instantly share code, notes, and snippets.

@yccheok
Created November 26, 2022 10:02
Show Gist options
  • Save yccheok/57b29af01330834d6767c44d832fc444 to your computer and use it in GitHub Desktop.
Save yccheok/57b29af01330834d6767c44d832fc444 to your computer and use it in GitHub Desktop.
class Fragment {
private void displayAdMob() {
initializeMobileAdsAsyncIfPossible(() -> {
...
adView.loadAd(adRequest);
});
}
}
public class Utils {
// volatile keyword is required : https://en.wikipedia.org/wiki/Double-checked_locking
// http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
private static volatile boolean initializeMobileAds = false;
private static final Object monitor = new Object();
public static void initializeMobileAdsAsyncIfPossible(Runnable runnable) {
if (!initializeMobileAds) {
// getCommonExecutor is a single thread executor.
getCommonExecutor().execute(() -> {
synchronized (monitor) {
if (!initializeMobileAds) {
// https://stackoverflow.com/questions/58084706/should-we-first-call-mobileads-setrequestconfiguration-or-mobileads-initialize
RequestConfiguration conf = new RequestConfiguration.Builder()
.setMaxAdContentRating(
MAX_AD_CONTENT_RATING_T)
.build();
MobileAds.setRequestConfiguration(conf);
MobileAds.initialize(WeNoteApplication.instance());
initializeMobileAds = true;
}
}
if (runnable != null) {
Assert(initializeMobileAds);
runInUiThread(runnable);
}
}); // getCommonExecutor().execute
} else {
if (runnable != null) {
Assert(initializeMobileAds);
runnable.run();
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment