阻止广告在后台显示 (Android Studio)

Prevent ads from showing in background (Android Studio)

所以我将我的广告设置为每 5 分钟显示一次,但问题是即使我的应用程序处于后台并且我正在使用另一个应用程序或就像将应用程序保持在后台一样,我的应用程序也会显示广告。 我希望我的应用程序广告在我将应用程序置于后台后停止显示(我的广告在我关闭应用程序后不显示,这很好,但在后台它仍然显示)

public class MainActivity extends AppCompatActivity {
    private InterstitialAd mInterstitialAd;


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

        ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
        if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||
                connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {


            MobileAds.initialize(this,
                    "ca-app-pub-3940256099942544~3347551713");
            mInterstitialAd = new InterstitialAd(this);
            mInterstitialAd.setAdUnitId("ca-app-pub-3940255099942544/1033173712");
            mInterstitialAd.loadAd(new AdRequest.Builder().build());
            prepareAD();
            ScheduledExecutorService ScheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
            ScheduledExecutorService.scheduleAtFixedRate(new Runnable() {
                @Override
                public void run() {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            if (mInterstitialAd.isLoaded()) {

                                mInterstitialAd.show();
                            } else {
                                Log.d("TAG", "Ad not loaded");
                            }
                            prepareAD();
                        }
                    });
                }
            }, 5, 5, TimeUnit.MINUTES);

        }else{
            Toast.makeText(getApplicationContext(), "No Internet Connection, please try again later...", Toast.LENGTH_LONG).show();

        }
    }

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

}

我会建议在主线程而不是某些后台线程中显示应用程序。如果你传递任何东西来检查 activity 是否在后台线程中存在,那么它就有可能发生内存泄漏。

即使它在后台,它也会检查 activity 状态并且会失败。

getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)

使用生命周期组件,执行此操作。

ScheduledExecutorService.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        boolean stateAlive = getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)
                        if (stateAlive && mInterstitialAd.isLoaded()) {

                            mInterstitialAd.show();
                        } else {
                            Log.d("TAG", "Ad not loaded");
                        }
                        prepareAD();
                    }
                });
            }
        }, 5, 5, TimeUnit.MINUTES);