在植入移动广告时减少 ANR 错误

2024 年 7 月 10 日,星期三

我们通过 Play 管理中心崩溃报告收到了您的反馈,了解到与 Google 移动广告 SDK 相关的应用无响应 (ANR) 错误。在分析这些报告后,我们更新了 SDK 实现最佳实践,以降低 ANR 发生率。建议的最佳做法如下:

  1. 在后台线程中初始化移动广告 SDK
  2. 启用广告加载优化标志

1. 在后台线程中初始化移动广告 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 清单标志,您可以将大多数广告加载任务分流到后台线程。我们建议您在应用的 AndroidManifest.xml 文件中启用此标志,以减少广告加载导致 ANR 的情况。

<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