adfit / adfit-android-sdk

AdFit Android SDK for Publisher
Apache License 2.0
24 stars 13 forks source link

unregisterReceiver 에서 not registered 오류가 발생하는데, #6

Closed iPhoneRealbyte closed 6 years ago

iPhoneRealbyte commented 6 years ago

안녕하세요. 여기에다가 남겨도 되는지 모르겠네요.

java.lang.IllegalArgumentException: Receiver not registered: com.kakao.adfit.ads.ba.BannerAdView$1@65ccb99

오류가 발생해서, Android 3.0.2 버전 업데이트가 어려울 것 같아서 문의드리고자 합니다. 해당 오류 발생 후 앱이 죽습니다.

at com.kakao.adfit.ads.ba.BannerAdView.onDetachedFromWindow(BannerAdView.java:815)

protected void onDetachedFromWindow() { c.a(e, "onDetachedFromWindow()"); this.getContext().unregisterReceiver(this.d); this.d(); if(this.w != null) { c.c("Ad has been detached from window. Stop ad refresh."); this.w.removeCallbacks(this.x); }

super.onDetachedFromWindow();

}

에서 발생하고 있는데, 제가 무엇을 잘못하고 있을까요?

chanyhan commented 6 years ago

CallStack 과 BannerAdView 를 어떤식으로 사용하고 계신지 간단한 SampleCode 를 첨부해주시면 감사하겠습니다.

iPhoneRealbyte commented 6 years ago

에러 CallStack 은 따로 남겨두질 않았네요;; 간헐적으로 발생하고 있는데, 다시 에러가 발생하면 남겨두도록 하겠습니다.

mKakaoAdView == null 인 경우에는 아래와 같이 init 하고 있습니다.

mKakaoAdView = new BannerAdView(activity);
mKakaoAdView.setAdListener(new com.kakao.adfit.ads.AdListener() {
  @Override
  public void onAdLoaded() {
    Utils.log("kakao 광고로딩 성공");
    if (mAdMobAdView != null) {
      destroyAdmobView();
    }
  }

  @Override
  public void onAdFailed(int code) {
    Utils.log("kakao 광고로딩 실패");
    destroyKakaoAdView();
    setAdmobBannerAd(activity);
  }

  @Override
  public void onAdClicked() {
    Utils.log("kakao 광고 클릭");
  }
});

Admob 과 같이 사용하고 있습니다. 카카오 광고를 가져오지 못하면, 화면전환이 이루어질 때, 카카오 뷰를 Add 합니다.

  LinearLayout linearLayout = getAdLinearLayout(activity);
  if (linearLayout != null) {
    if (mKakaoAdView != null) {
      ViewGroup pVg = (ViewGroup) mKakaoAdView.getParent();
      if (pVg != null) {
        pVg.removeView(mKakaoAdView);
      }
      linearLayout.addView(mKakaoAdView);
    }
  }

카카오 광고를 로드하지 못하면, Admob 광고를 가져오고, 카카오 뷰를 제거합니다. 혹은 화면이 destory 될 때, 아래 코드를 호출하고 있습니다.

  private void removeBannerView(View view) {
    try {
      ViewGroup pVg = (ViewGroup) view.getParent();
      if (pVg != null) {
        pVg.removeView(view);
      }
    } catch (Exception e) {
      Utils.log(e);
    }
  }

  private void destroyKakaoAdView() {
    if (mKakaoAdView != null) {

      ViewGroup pVg = (ViewGroup) view.getParent();
      if (pVg != null) {
        pVg.removeView(view);
      }

      removeBannerView(mKakaoAdView);
      mKakaoAdView.destroy();
      mKakaoAdView = null;
    }
  }

그리고, 다시 화면 전환이 이뤄지면, 카카오뷰를 Add 합니다.

chanyhan commented 6 years ago

@iPhoneRealbyte 혹시 항상 발생하는 오류인가요? 간헐적으로 발생하는 오류인가요? 제작하시는 앱에서 동선을 간단히 설명해 주시면 좋을 것 같습니다. ^^;

iPhoneRealbyte commented 6 years ago

간헐적으로 발생하고 있습니다. 광고가 있는 화면을 갔다가, 광고가 없는 화면으로 돌아왔을 때, 간헐적으로 발생하고 있습니다.

chanyhan commented 6 years ago

@iPhoneRealbyte 재현이 되지않아 정확한 원인을 파악하기는 어렵네요. 조만간 방어코드를 추가한 버전을 배포할 예정입니다. 참고해주세요.

iPhoneRealbyte commented 6 years ago

한번 확인해봐주시면 좋을 것 같습니다. 그리고 방어코드 버전은 언제쯤 배포될런지요?

at android.app.LoadedApk.forgetReceiverDispatcher (LoadedApk.java:1054) at android.app.ContextImpl.unregisterReceiver (ContextImpl.java:1376) at android.content.ContextWrapper.unregisterReceiver (ContextWrapper.java:659) at com.kakao.adfit.ads.ba.BannerAdView.onDetachedFromWindow (BannerAdView.java:815) at android.view.View.dispatchDetachedFromWindow (View.java:16690) at android.view.ViewGroup.dispatchDetachedFromWindow (ViewGroup.java:3426) at android.view.ViewGroup.dispatchDetachedFromWindow (ViewGroup.java:3418) at android.view.ViewGroup.dispatchDetachedFromWindow (ViewGroup.java:3418) at android.view.ViewGroup.dispatchDetachedFromWindow (ViewGroup.java:3418) at android.view.ViewGroup.dispatchDetachedFromWindow (ViewGroup.java:3418) at android.view.ViewGroup.dispatchDetachedFromWindow (ViewGroup.java:3418) at android.view.ViewGroup.dispatchDetachedFromWindow (ViewGroup.java:3418) at android.view.ViewGroup.dispatchDetachedFromWindow (ViewGroup.java:3418) at android.view.ViewGroup.dispatchDetachedFromWindow (ViewGroup.java:3418) at android.view.ViewRootImpl.dispatchDetachedFromWindow (ViewRootImpl.java:3635) at android.view.ViewRootImpl.doDie (ViewRootImpl.java:6576) at android.view.ViewRootImpl.die (ViewRootImpl.java:6553) at android.view.WindowManagerGlobal.removeViewLocked (WindowManagerGlobal.java:446) at android.view.WindowManagerGlobal.removeView (WindowManagerGlobal.java:384) at android.view.WindowManagerImpl.removeViewImmediate (WindowManagerImpl.java:128) at android.app.ActivityThread.handleDestroyActivity (ActivityThread.java:4606) at android.app.ActivityThread.-wrap7 (ActivityThread.java) at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1689) at android.os.Handler.dispatchMessage (Handler.java:102) at android.os.Looper.loop (Looper.java:154) at android.app.ActivityThread.main (ActivityThread.java:6646) at java.lang.reflect.Method.invoke (Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1468) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1358)

chanyhan commented 6 years ago

@iPhoneRealbyte 많이 늦어서 죄송합니다. 3.0.3 에 패치되었습니다.