我的布局中有一个 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。这将使它不那么引人注目,因为用户不太可能希望在屏幕显示后立即与应用程序交互
但这些只是解决方法。我真的很想知道为什么布局试图访问互联网,以及如何防止它这样做。