2012-11-26 5 views
8

Sto cercando di creare un eseguibile che può caricare gli annunci per ogni intervallo di 5 secondi (ovviamente 5 secondi è troppo veloce, è solo a scopo di test)Come smettere di essere eseguibile quando l'app passa allo sfondo?

Ecco il mio codice:

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; 
    } 

} 

Se Premo il tasto home per nascondere l'app sullo sfondo, il runnable continua a caricare gli annunci per un intervallo di 5 secondi.

Esiste un metodo per interrompere la modalità eseguibile quando un'app è nascosta sullo sfondo? Grazie molto.

risposta

29

è sufficiente utilizzare il onPause()

Chiamato come parte del ciclo di vita di attività quando un'attività sta andando in secondo piano, ma non è (ancora) stati uccisi

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

opzionale

Se voglio riprendere quella eseguibile. Basta ignorare il onResume() callback

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

Rimuovere anche il handler.postDelayed(runnable, 5000); in onCreate()

+0

BTW, l'applicazione funziona perfettamente dopo aver rimosso handler.postDelayed (eseguibile , 5000) in onCreate(), è perché quando apro l'app, verrà avviato il metodo run()? In modo che non ho bisogno di chiamare di nuovo gestore con onCreate()? –

+0

dopo aver chiamato '' onCreate() '' dal sistema Android, il prossimo sarà '' onStart() '' e poi '' onResume() ''. Puoi vederlo qui, http://developer.android.com/training/basics/activity-lifecycle/starting.html –

+1

e se si è trasferito in un'altra attività? Come lo fa lì? – tony9099

0

onPause() viene chiamato quando l'applicazione va in background. Rimuovere eseguibile in onPause()

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

cosa succede se si è trasferito in un'altra attività? Come lo fa lì? – tony9099

+1

@ tony9099, è lo stesso. L'attività effettiva deve passare allo sfondo prima che un'altra attività venga in primo piano. onPause() sarà chiamato. –

Problemi correlati