2016-06-16 8 views
4

アプリケーションでパフォーマンスの問題が発生しました(UIレンダリングが瞬間的にフリーズする)、いくつかの調査が行われ、PublisherAdView.loadAd()メソッドがNexus 5で約500〜アプリの開始とその後の実行で100~200ミリ秒。私は最悪で10〜15ミリ秒を期待した。これを確認するにはAndroidでのPublisherAdView loadAdパフォーマンスの問題

は、私はここからバナー例をダウンロード:https://developers.google.com/mobile-ads-sdk/docs/dfp/android/bannerと別々の方法でloadAd()メソッドを実行するためにMainActivityを修正:

private PublisherAdView mAdView; 
private PublisherAdRequest adRequest; 

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

    mAdView = (PublisherAdView) findViewById(R.id.ad_view); 

    adRequest = new PublisherAdRequest.Builder().build(); 

    loadAd(); 
} 

private void loadAd(){ 

    long start = System.currentTimeMillis(); 

    // Start loading the ad in the background. 
    mAdView.loadAd(adRequest); 

    long end = System.currentTimeMillis(); 

    Log.d("MyActivity", "loadAd took "+(end - start)+" ms"); 
} 

問題は一層明白表示する複数の広告がある場合になると同時に(記事の冒頭にバナー、序文の下にある矩形の広告など)、UIが読み込まれるまで半分以上固定されます。

これは、RecyclerViewに広告を表示するときや、スクロール中に広告が読み込まれるまでUIがフリーズするときにも発生します。

ここに何か不足していますか、これは実際にはPublisherAdViewの問題ですか?

答えて

1

私は似たような経験をしていますが、adMobはAndroid搭載端末では恐ろしく効率が悪く、CPUに課税されるウェブビューを使用しています。最初の長い読み込み時間は、AndroidがChromiumプラグインに接続してWebviewセッションを開始する時間です。一度メモリに入れば改善されます。リスト/リサイクルビューで使用されたときに最も顕著です。

私が使用するアプローチは、バナーをフラグメントとアクティビティに一度表示することです。リフレッシュは、広告サーバー側で設定できます。リストに広告を挿入することを避けます(n番目の要素ごとに広告を挿入するなど)。ただし、必要な場合は、view.setTagを使用して広告がロードされたことを示すフラグを記録します。

このフラグは、実際に広告が読み込まれた時間になります。その後、そのタグをrecyclerviewのbindViewHolderで使用するか、従来のlistViewでgetItemを使用して、広告がロードされているかどうかを判断します。広告が既にロードされている場合は、現在のコンテンツ/レイアウトを表示するだけです。期限が切れている場合(30秒のような任意の時間によって)、または値が設定されていない場合は、loadAdリクエストを送信します。もう一度演奏をする。

ユーザーがスクロールすると、リスト要素がインスタンス化されるたびに広告を要求し続けることがないため、スクロールのパフォーマンスは徐々に向上します。また、フラグメントを使用している場合は、断片がある場合はPublisherAdView.pause()を必ずオンにしてください。これは、onDestroyView中にビューページ内にある場合に限られます。

関連する問題