androidadmobadsandroid-lifecycle

Do you need to explicitly call pause, resume, destroy for an AdView?


Is the AdView automatically tied to the activity life cycle or do you have to explicitly call the pause, resume, destroy events? Does it depend on the size of the AdView? I'm using banner ads.

I couldn't find a lot of code samples of other people doing this and the main Android help article doesn't mention it (they just load the ad in onCreate and don't do anything else with it).

https://developers.google.com/android/reference/com/google/android/gms/ads/AdView (code example includes pause/resume/destroy and it mentions we "should call these methods" in the method notes, but doesn't elaborate).

https://developers.google.com/admob/android/banner (does not mention the need to pause/resume/destroy).

http://thetechnocafe.com/a-complete-guide-to-integrating-admob-in-your-android-app/ (pauses and destroys video ads in the code, but doesn't mention why or give any explanation)

<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

    <!-- app content -->

    <com.google.android.gms.ads.AdView
            xmlns:ads="http://schemas.android.com/apk/res-auto"
            android:id="@+id/myAdView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            ads:adSize="BANNER"
            ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
    </com.google.android.gms.ads.AdView>
</LinearLayout>
public class MainActivity extends AppCompatActivity {
    private AdView mAdView;

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

        // ...

        mAdView = findViewById(R.id.myAdView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
    }

    // do I need this code as well???
    @Override
    public void onResume() {
        mAdView.resume();
        super.onResume();
    }
    
    @Override
    public void onPause() {
        mAdView.pause();
        super.onPause();
    }
    
    @Override
    public void onDestroy() {
        mAdView.destroy();
        super.onDestroy();
    }

Solution

  • You Should always try to use pause, resume and destroy. As adView does background processing ( ad analytics ). That doesn't make a huge difference. but there is no harm in using them.

    Adview.onPause() - Pauses any extra processing associated with this ad view. Adview.onResume() - Resumes an ad view after a previous call to pause(). Adview.destroy() - Destroy the Ad completely

    This is what Android doc has to say Android Doc