android - 如何每 X 秒显示插页式广告

标签 android android-studio ads interstitial

我需要每隔 x 秒在我的应用中展示插页式广告。我已经关闭了这段代码。它工作正常,但问题是,即使应用关闭,插页式广告仍然会显示。

当应用程序关闭时,我怎样才能阻止它?

谢谢。

public class MainActivity 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");
                        }

                        prepareAd();
                    }
                });
            }
        }, 10, 10, TimeUnit.SECONDS);
    }

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

最佳答案

似乎您的 Activity 在后台,然后用户将能够看到广告,因为一旦您的 Activity 被销毁,您的广告将无法显示,没有 this 上下文没有 Activity 。

首先:在 onCreate 之外保留对 ScheduledExecutorService 的引用

第二:覆盖 onStop 并调用 scheduler.shutdownNow()

onStop : 当你的 Activity 进入后台状态时它会被调用

shutdownNow() : 将尝试停止当前正在运行的任务并停止执行正在等待的任务

所以即使您的应用程序在后台,这也会停止执行程序

public class MainActivity extends AppCompatActivity {

    private InterstitialAd mInterstitialAd;
    private ScheduledExecutorService scheduler;
    private boolean isVisible;

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


    @Override
    protected void onStart(){
    super.onStart();
        isVisible = true;
        if(scheduler == null){
            scheduler = Executors.newSingleThreadScheduledExecutor();
            scheduler.scheduleAtFixedRate(new Runnable() {
        public void run() {
            Log.i("hello", "world");
            runOnUiThread(new Runnable() {
                public void run() {
                    if (mInterstitialAd.isLoaded() && isVisible) {
                        mInterstitialAd.show();
                    } else {
                       Log.d("TAG"," Interstitial not loaded");
                    }

                    prepareAd();
                }
            });
        }
    }, 10, 10, TimeUnit.SECONDS);

        }

    }    
    //.. code 

    @Override
    protected void onStop() {
        super.onStop();
        scheduler.shutdownNow();
        scheduler = null;
        isVisible =false;
   }

}

关于android - 如何每 X 秒显示插页式广告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47857786/

相关文章:

android-studio - 在物理设备中运行时,Flutter 中的热重载不起作用

android - 具有优先级 ID 和日期时间的排序列表模型

android - 如何更改终端的默认目录?

android - React Native 中未知的随机内存崩溃

php - 有概率的横幅旋转器广告

android - 无法使用 mopub 从 admob 获取广告

Android:在不同的 Activity 中重复使用相同的 View 对象(案例是关于广告横幅)

android - 包含特殊字符的 SQLite 查询

Android - Proguard 未使用 Joda Time jar 文件编译

android - 使用共享首选项单击后一分钟后显示 View