12 votes

Comment arrêter Runnable lorsque l'application passe en arrière-plan ?

Je suis en train d'essayer d'établir un runnable qui peut charger des publicités à chaque intervalle de 5 secondes (bien sûr, 5 secondes c'est trop rapide, c'est juste à des fins de test)

Voici mon code:

package com.admobsdk_dfp_handler;

import com.google.ads.*;
import com.google.ads.doubleclick.*;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.view.Menu;
import android.widget.RelativeLayout;

public class AdMobSDK_DFP_Handler extends Activity {
    private DfpAdView adView;
    private Handler handler = new Handler();
    private Runnable runnable = new Runnable() {

        public void run() {
        adView.loadAd(new AdRequest());
        handler.postDelayed(this, 5000);
    }
    };

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

        adView = new DfpAdView(
                this,
                AdSize.BANNER,
                AD_UNIT_ID);

        RelativeLayout layout = (RelativeLayout) findViewById(R.id.mainLayout);

        layout.addView(adView);

        adView.loadAd(new AdRequest());

        handler.postDelayed(runnable, 5000);

    };

    @Override
    protected void onDestroy() {
        handler.removeCallbacks(runnable);
        super.onDestroy();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_ad_mob_sdk__dfp__handler,
                menu);
        return true;
    }

}

Si j'appuie sur le bouton principal pour masquer l'application en arrière-plan, le runnable continue de charger des publicités toutes les 5 secondes.

Y a-t-il une méthode pour arrêter le runnable lorsque l'application est masquée en arrière-plan? Merci beaucoup.

37voto

Il suffit d'utiliser le onPause()

Appelé dans le cadre du cycle de vie de l'activité lorsqu'une activité passe en arrière-plan, mais n'a pas (encore) été tuée

@Override
protected void onPause() {
     handler.removeCallbacks(runnable);
     super.onPause();
}

Optionnel

Si vous voulez reprendre ce runnable. Remplacez simplement le callback onResume()

@Override
protected void onResume()
{
      handler.postDelayed(runnable, 5000);
      super.onResume();
}

Supprimez également le handler.postDelayed(runnable, 5000); dans onCreate()

2voto

Mikhaili Points 131

onPause() onStop() fonctions vous pouvez mettre là handler.removeCallbacks(runnable);

Vous pouvez obtenir plus d'informations ici Consultez le cycle de vie de l'Activité

0voto

Lazy Ninja Points 6921

OnPause() est appelé lorsque l'application passe en arrière-plan. Supprimez le runnable dans onPause()

protected void onPause() {
     handler.removeCallbacks(runnable);
     super.onPause();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X