2012-11-26 15 views
8

próbuję ustanowić runnable które można załadować ogłoszenia każdym odstępie 5 sekund (oczywiście 5 sek jest zbyt duża, to tylko dla celów testowania)Jak zatrzymać działanie, gdy aplikacja przechodzi w tło?

Oto mój kod:

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

} 

Jeśli Naciskam przycisk strony głównej, aby ukryć aplikację na tle. Działanie jest nadal wczytywane z reklamami w odstępach co 5 sekund.

Czy istnieje jakakolwiek metoda zatrzymania pracy, gdy aplikacja jest ukryta w tle? Wielkie dzięki.

Odpowiedz

29

Wystarczy użyć onPause()

nazywane jako część cyklu aktywności, gdy działalność jest przechodzenia w tle, ale (jeszcze) nie został zabity

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

Opcjonalnie

Jeśli chcesz wznowić to działanie. Wystarczy zastąpić the onResume() wywołanie zwrotne

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

Usunąć z handler.postDelayed(runnable, 5000); w onCreate()

+0

BTW, aplikacja działa idealnie po usunięciu handler.postDelayed (runnable , 5000) w onCreate(), czy to dlatego, że po uruchomieniu aplikacji uruchomi się metoda run()? Tak, że nie trzeba ponownie wywoływać programu obsługi z onCreate()? –

+0

po wywołaniu '' onCreate() '' przez system Android, następnym będzie '' onStart() '', a następnie '' onResume() ''. Możesz to zobaczyć tutaj, http://developer.android.com/training/basics/activity-lifecycle/starting.html –

+1

co, jeśli przeniósł się do innej działalności? Jak on to robi? – tony9099

0

OnPause() jest wywoływana gdy aplikacja przechodzi w tle. Usuń runnable w OnPause()

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

co, jeśli przeniósł się do innej działalności? Jak on to robi? – tony9099

+1

@ tony9099, to jest to samo. Faktyczna aktywność musi przejść do tła, zanim inna aktywność przejdzie na pierwszy plan. onPause() zostanie wywołany. –

Powiązane problemy