2012-02-20 2 views
7

나는 게임을 개발 중입니다. 그래도 AdMob 광고를 새로 고치는 데는 약간의 문제가 있습니다. 광고가 새로 고쳐 지거나 광고의 다른면을 그릴 때마다 프레임 속도가 급속히 떨어지고 게임이 거의 재생되지 않습니다. 다음은 SurfaceView의 상단에 광고를 렌더링하기위한Android, AdMob : AdMob 광고 새로 고침으로 인해 프레임 속도가 흐림

ad = new AdView(this, AdSize.BANNER, "..."); 

    AdRequest adRequest = new AdRequest(); 
    adRequest.addTestDevice("..."); 
    adRequest.addTestDevice("..."); 

    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, 
      RelativeLayout.LayoutParams.WRAP_CONTENT); 
    lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
    lp.addRule(RelativeLayout.CENTER_HORIZONTAL); 
    ad.setLayoutParams(lp); 

    RelativeLayout layout = new RelativeLayout(this); 
    layout.addView(renderView); 
    layout.addView(ad); 
    ad.loadAd(new AdRequest());  

    setContentView(layout); 

내 솔루션 단지 RelativeLayout에 추가하고 SurfaceView과에 AdView 모두 추가했다 ... 나는 광고의 로딩이 것입니다. 이 모든 것이 훌륭하게 작동하지만 광고가 새로 고침 될 때마다 (UI 또는 새 광고 요청) UI 스레드가 다운되어 렌더링 스레드가 느려집니다.

메인 작업과 별도로 AdView에서 수행 한 모든 작업을 훌륭하게 처리 할 수있는 방법이 있습니까? 다른 스레드에서 현재 레이아웃을 동적으로 업데이트하는 것에 대해서는 확신 할 수 없습니다.

도움 주셔서 감사합니다.

+0

없음 바이트로 정의 runOnWebView 방법과 WebViewAction 인터페이스

/* * The AdView attaches it's internal WebView only once it * has been loaded, so we need to wait until that happens. */ adView.setAdListener(new AdListener() { @Override public void onAdLoaded() { runOnWebView(mAdView, new WebViewAction() { @Override public void run(WebView view) { // the most important part is here view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); } }); } }); 

이 :( – SemperGumbee

답변

8

이 문제도 발생했습니다. 정적 인 Admob 배너 광고가 아닌 전혀 변화가없는 광고가 변경 될 때마다 움직이는 Google 광고가 원인 인 것으로 나타났습니다. admob 앱 설정에서 Google 광고의 사용 여부를 제어 할 수있는 설정이 있습니다. 차이가 있는지 확인하기 위해 설정을 해제하십시오. 이 질문에 부활에 대한

+1

이 도움이 실제로 않습니다.인가 Adsense가 광고에 통합 된 상태로 유지하면서이 문제를 해결하기 위해 할 수있는 다른 방법이 있습니까? – SemperGumbee

+2

스레드 우선 순위로 부지런히 시도해 볼 수 있습니다. 주 스레드의 우선 순위를 낮추어 렌더링 스레드 및 게임 엔진 스레드와의 투쟁을 최소화하십시오. 와이 UI 스레드는 우선 순위가 낮은 광고 만 업데이트합니다. –

+0

저는이 설정이 어디에 있는지 찾아보고 있습니다. 새로운 apps.admob.com 웹 사이트를 사용하고 있습니다. 이 설정 옵션이 계속 존재합니까? – talloaktrees

3

죄송합니다,하지만 난 같은 문제가 건너 관리 및에 LAYER_TYPE_SOFTWARE을 돌리면 AdViewWebView 내부는 부드럽게 만든 것을 발견했다.

안드로이드 5.1에서 실행되는 버전 8.4.0을 사용하는 것이 좋겠지 만,이 해결 방법은 더 강력한 CPU를 갖춘 더 많은 장치에 도움이 될 수 있습니다. 내 활동의 onResume에서

나는 .......

/** 
* Recursively searches for a WebView instance located in 
* the hierarchy of view and invokes the callback method on 
* action with the found instance. 
*/ 
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); 
}