Запретить показ рекламы в фоновом режиме (Android Studio) - PullRequest
0 голосов
/ 08 февраля 2020

, поэтому я настраиваю показ своего объявления через каждые 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());
    }

}

1 Ответ

0 голосов
/ 08 февраля 2020

Я предлагаю показать приложение в основном потоке вместо какого-либо фонового потока. Если вы передадите что-нибудь, чтобы проверить, является ли действие активным в фоновом потоке, то есть вероятность утечки памяти.

Даже если он находится в фоновом режиме, он проверит состояние активности и потерпит неудачу.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...