2015-09-06 3 views
1

Мое приложение использует навигационный ящик. После нажатия на элемент в ящике на нем появится фрагмент. И я поставил код AdMob внутри фрагмента, как показано ниже:AdMob вызывает задержку отображения фрагментов

public class MenuIncome extends Fragment { 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     final View rootView = inflater.inflate(R.layout.menu_income, container, false); 
     AdView mAdView = (AdView) rootView.findViewById(R.id.adView); 
     AdRequest adRequest = new AdRequest.Builder().build(); 
     mAdView.loadAd(adRequest); 
     mAdView.destroy(); 

     return rootView; 
    } 
} 

Перед тем, как поместить код AdMob, мой фрагмент будет отображаться мгновенно после нажатия элемента на панели навигации. Но после того, как я поместил код AdMob, когда я нажимаю элемент в ящике, иногда мое приложение будет хотеть замораживаться на срок до 1 секунды, тогда будет отображаться только фрагмент (с объявлением).

Зачем это происходит? Я думал, что AdView уже загружает свое объявление асинхронно.

+1

Почему вы уничтожить ваш AdView после загрузки объявления. Это, несомненно, вызовет проблемы. – William

+0

, потому что кажется, что все учебники делают это. – imin

+0

Я никогда не видел учебника. И определенно те, что Admob этого не делают. – William

ответ

0

Вы попробовали вместо этого разместить AdView у своего родителя Activity, в котором находится Fragment?

Ниже приведено описание того, как я использую рекламу в своем приложении, которая также использует ящик для навигации и несколько фрагментов. Загрузки фрагментов вообще нет. Фактически, порой фрагмент загружается задолго до объявления, в зависимости от случая.

MainActivity.java:

public class MainActivity extends ActionBarActivity { 

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

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

} 

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    ...> 

    ... 

    <com.google.android.gms.ads.AdView 
     android:id="@+id/adView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_alignParentBottom="true" 
     ads:adSize="BANNER" 
     ads:adUnitId="@string/banner_ad_unit_id"> 
    </com.google.android.gms.ads.AdView> 

</RelativeLayout> 
+0

Не думаю, что я мог бы поступить так же, как ваш. Не все мои фрагменты имеют AdView. Кроме того, что я не понимаю, из приведенного выше кода кажется, что вы загружаете объявления в свой MainActivity. Как тогда отдельные фрагменты под ним загружают объявления? – imin

3

Первый вызов loadAd(..) занимает некоторое время для инициализации AdMob и это замерзает ваш фрагмент при загрузке. Вы можете отложить инициализацию, пока ваш фрагмент не был загружен и видно:

   mAdView.postDelayed(
        new Runnable() { 
         @Override 
         public void run() { 
          mAdView.loadAd(adRequest); 
         } 
        }, 500 
      ); 
Смежные вопросы