Как отменить ScheduledExecutorService / Runnable, чтобы остановить загрузку InterstitialAd на backpress / выйти из действия - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу отображать InterstitialAd только один раз за определенное время. Но перед выполнением метода загрузки InterstitialAd, если пользователь снова нажимает на действие и завершает действие, метод ScheduledExecutorService или Runnable должен полностью остановиться, но он работает в фоновом режиме иотображает InterstitialAd в определенное время.Как остановить, чтобы отобразить InterstitialAd в следующем коде. Спасибо.

public class CustomActivity extends AppCompatActivity {

    private InterstitialAd mInterstitialAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        prepareAd();

        ScheduledExecutorService scheduler =
                Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(new Runnable() {

            public void run() {
                Log.i("hello", "world");
                runOnUiThread(new Runnable() {
                    public void run() {
                        if (mInterstitialAd.isLoaded()) {
                            mInterstitialAd.show();
                        } else {
                           Log.d("TAG"," Interstitial not loaded");
                        }



                    }
                });

            }
        }, 30, 1, TimeUnit.SECONDS);

     }


    public void  prepareAd(){

        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
        mInterstitialAd.loadAd(new AdRequest.Builder().build());
    }

 @Override
    public void onBackPressed() {
       super.onBackPressed();
        finish();
    }
}

1 Ответ

0 голосов
/ 03 декабря 2018

Существует метод для действия, isFinishing(), который определяет, выполняется ли действие по-прежнему, был ли он уничтожен или вызван finish() вкл. Из.

Если он возвращает значение true, вы можете показать объявление, если значение false, отмените планировщик.

Пример

           public void run() {

                    if (!isFinishing() && mInterstitialAd.isLoaded()) {

                        mInterstitialAd.show();
                    } else if(isFinishing()){

                        scheduler.shutdown();
                    }
                    else{
                        Log.d("TAG"," Interstitial not loaded");   
                    }

                } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...