Java 谷歌广告中断了应用程序。减速fps
我使用Java 谷歌广告中断了应用程序。减速fps,java,android,admob,ads,Java,Android,Admob,Ads,我使用AdView-mAdView和最近更新的库 我将AdView放置到布局中(如示例所示): 但是我的布局有一些动画对象。当新广告可见时,此动画将冻结(跳过某些帧) 我们不能抓住同样的问题与残疾互联网(它禁用广告,而不影响滞后) 我试图用我自己的记录显示问题(GIF无法完全显示): 我如何才能消除广告的滞后,让用户体验更好?我认为,广告不应该是一个横幅,因为这是一个大广告,这会降低性能,因为你应该把它缩小。这也可能涵盖应用程序中的内容(如果广告位于横幅上) 另一件事是,你不能有广告,这样性能
AdView-mAdView
和最近更新的库
我将AdView放置到布局中(如示例所示):
但是我的布局有一些动画对象。当新广告可见时,此动画将冻结(跳过某些帧)
我们不能抓住同样的问题与残疾互联网(它禁用广告,而不影响滞后)
我试图用我自己的记录显示问题(GIF无法完全显示):
我如何才能消除广告的滞后,让用户体验更好?我认为,广告不应该是一个
横幅,因为这是一个大广告,这会降低性能,因为你应该把它缩小。这也可能涵盖应用程序中的内容(如果广告位于横幅上)
另一件事是,你不能有广告,这样性能会更好。试试这些。大多数情况下,广告都有很好的图形效果,可能会减慢你的应用速度 将广告视图置于线性布局中,并实现广告侦听器。在adListener的onAdLoaded()方法中,将adView添加到线性布局中,如linearLayout.addView(adView),并将动画放置在线性布局上。我希望它能对您有所帮助。作为我的应用程序中的一个解决方法,我设置了一个图层类型
:
mAdView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
或
这是一个已知的问题,在网上已经讨论过很多次,用“AdMob fps drop”等词搜索就足够了
这里问题的根源很可能是运行AdMob需要大量资源,这就是动画开始暂停的原因。作为一种解决方案,您可以延迟显示广告:
Handler handler = new Handler ();
handler.postDelayed (new Runnable () {
@Override
public void run () {
AdRequest bannerRequest = new AdRequest.Builder (). Build ();
mAdView.loadAd (bannerRequest);
}
}, 2000);
您可以使延迟不固定,但将其绑定到用户操作。例如,在用户停止滚动屏幕后立即开始下载广告
另一个解决方案是通过操纵LAYER_TYPE_软件属性来禁用广告的图形加速
mAdView.setAdListener(new AdListener(){
@Override
public void onAdLoaded(){
runOnWebView(mAdView, new WebViewAction(){
@Override
public void run(WebView view){
view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
});
}
});
对于这种解决方案,需要实现以下接口:
private void runOnWebView (View view, WebViewAction action) {
if (view instanceof WebView){
action.run((WebView)view);
return;
}
if (view instanceof ViewGroup) {
final ViewGroup parent = (ViewGroup)view;
for (int i = 0; i < parent.getChildCount(); i++) {
runOnWebView(parent.getChildAt(i), action);
}
}
}
private interface WebViewAction{
void run(WebView view);
}
private void runOnWebView(视图视图、webview操作){
if(查看WebView的实例){
运行((WebView)视图);
返回;
}
if(视图组的视图实例){
最终视图组父视图=(视图组)视图;
对于(int i=0;i
类似地,可以关闭某些活动的加速:
<activity
android:hardwareAccelerated = "false"
android:softwareAccelerated = "false" />
我不得不说:广告有一个固定的默认大小:它非常小:150*50。绘图?不,我想是GIFBanner
是此类广告的名称。我在AdMob上看到过。如果你有一个像谷歌这样的服务器,那么使用广告就可以了。如果没有,就不要放广告,还有其他的单一化方式。我只是不明白你的意思。最后,我知道你不明白这个问题和AdMob。AdMob使用谷歌的服务器,实际上是谷歌的子公司需要更多关于加载何种广告的信息。{视频?文本?图像?)确保你没有覆盖。@你可以在第二个屏幕的底部看到它。这是谷歌的广告。默认广告横幅:150x50。你说的“覆盖”是什么意思滞后现象实际上已经存在。我不这么认为。它不起作用。我有自己的答案。它有帮助me@EgorRandomize但是你在回答中添加了我的解决方案!!我想你应该给我一个正确的符号:)当然!我实际上不知道哪个部分确实有用。view.setLayerType(view.LAYER\u TYPE\u HARDWARE,null);view.setLayerType(view.LAYER\u TYPE\u SOFTWARE,null);这一部分,我希望这是主要的解决方案!:)
mAdView.setAdListener(new AdListener(){
@Override
public void onAdLoaded(){
runOnWebView(mAdView, new WebViewAction(){
@Override
public void run(WebView view){
view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
});
}
});
private void runOnWebView (View view, WebViewAction action) {
if (view instanceof WebView){
action.run((WebView)view);
return;
}
if (view instanceof ViewGroup) {
final ViewGroup parent = (ViewGroup)view;
for (int i = 0; i < parent.getChildCount(); i++) {
runOnWebView(parent.getChildAt(i), action);
}
}
}
private interface WebViewAction{
void run(WebView view);
}
<activity
android:hardwareAccelerated = "false"
android:softwareAccelerated = "false" />