1

我的布局中有一个 com.google.ads.AdView。我有我的应用程序的精简版和专业版,如果专业版正在运行,布局是隐藏的。

AdView 设置为在创建时不加载添加:

   <com.google.ads.AdView
       xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
       android:id="@+id/adView"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center|bottom"
       ads:adSize="IAB_MRECT"
       ads:adUnitId="a15235585e60557"
       ads:loadAdOnCreate="false"
       android:gravity="bottom" />

但是,当从我的 OnCreate() 调用以下代码行时

setContentView(R.layout.myactivity);

logcat 中显示以下错误(对于 pro 版本,清单中没有 INTERNET 权限):

E/Ads(30709):必须在 AndroidManifest.xml 中启用 INTERNET 权限。E/Ads(30709):您必须在 AndroidManifest.xml 中拥有 INTERNET 和 ACCESS_NETWORK_STATE 权限。

现在,这不是一个致命错误,因为应用程序可以继续加载,但它会导致加载过程挂起,因为无论发生 Internet 访问,都发生在 UI 线程上 - 导致应用程序处理几秒钟加载时。事实上,如果我给应用程序 INTERNET 权限,加载时我会在 logcat 中收到以下消息:

I/Choreographer(30487):跳过了 32 帧!应用程序可能在其主线程上做了太多工作。

当然,现在有多种方法可以解决这个问题。我可以考虑做以下事情:

  • Lite/Full 版本有单独的布局,只需在 lite 版本上暂停即可
  • 在应用程序加载并显示其初始布局之后,以编程方式添加 AddView。这将使它不那么引人注目,因为用户不太可能希望在屏幕显示后立即与应用程序交互

但这些只是解决方法。我真的很想知道为什么布局试图访问互联网,以及如何防止它这样做。

4

0 回答 0