モバイル広告を実装する際の ANR を減らす

2024 年 7 月 10 日(水曜日)

Google Mobile Ads SDK に関連するアプリケーション応答なし(ANR)エラーについて、Google Play Console のクラッシュ レポートを通じてフィードバックをいただきました。これらのレポートを分析した結果、ANR 発生率を低減するために SDK 実装のベスト プラクティスを更新しました。推奨されるベスト プラクティスは次のとおりです。

  1. バックグラウンド スレッドで Mobile Ads SDK を初期化する
  2. 広告の読み込みの最適化フラグを有効にする

1. バックグラウンド スレッドで Mobile Ads SDK を初期化する

以前のベスト プラクティスは、OPTIMIZE_INITIALIZATION マニフェスト フラグを指定することでした。ただし、他のメソッド呼び出しを同期的に処理するように MobileAds を準備するには、呼び出し元スレッドでの作業がまだ必要です。

バックグラウンド スレッドで MobileAds.initialize() を呼び出し、呼び出し元のスレッドで必要な処理をバックグラウンドで実行できるようにすることをおすすめします。

import com.google.android.gms.ads.MobileAds
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

class MainActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    CoroutineScope(Dispatchers.IO).launch {
      // Initialize the Google Mobile Ads SDK on a background thread.
      MobileAds.initialize(this@MainActivity) {}
      runOnUiThread {
        // Load an ad on the main thread.
        loadAd()
      }
    }
  }
}

注: バックグラウンド スレッドで MobileAds.initialize() を呼び出す場合、OPTIMIZE_INITIALIZATION マニフェスト フラグは不要になりました。

2. 広告の読み込みの最適化フラグを有効にする

OPTIMIZE_AD_LOADING マニフェスト フラグを有効にすると、広告の読み込みタスクのほとんどをバックグラウンド スレッドにオフロードできます。広告の読み込みが原因で ANR が発生するのを防ぐため、アプリの AndroidManifest.xml ファイルでこのフラグを有効にすることをおすすめします。

<manifest>
  ...
  <application>
      ...
      <meta-data
          android:name="com.google.android.gms.ads.flag.OPTIMIZE_AD_LOADING"
          android:value="true"/>
  </application>
</manifest>

これらのベスト プラクティスを実装するために、すべての Android サンプルアプリを更新しました。初期化フラグと最適化フラグの詳細については、スタートガイドと初期化と広告の読み込みを最適化するをご覧ください。ご不明な点がある場合やサポートが必要な場合は、お問い合わせください。

ラベル: ad-manager、 admob、 android、 mobile-ads-sdk