【问题标题】:android: admob InterstitialAd crash at loadAdandroid:admob InterstitialAd 在 loadAd 崩溃
【发布时间】:2017-04-05 16:11:25
【问题描述】:

我正在使用 Admob 的 InterstitialAd。我的应用程序仅在第一次被调用时在“loadAd”处崩溃,并且不可重现(它在 100-200 次或多或少的运行中发生一次)。广告单元 ID 肯定是正确的。因此,如果 loadAd 在第一次调用时没有失败,那么这次运行就不会失败。

班级成员:

InterstitialAd mInterstitialAd;

创建:

mInterstitialAd = new InterstitialAd(this);

mInterstitialAd.setAdUnitId(getResources().getString(R.string.interstitial_ad_unit_id));

mInterstitialAd.setAdListener(new AdListener() {
    @Override
    public void onAdClosed() {
        requestNewInterstitial();
        finish();
    }
});

requestNewInterstitial();

requestNewInterstitial 方法:

private void requestNewInterstitial() {
    if (mInterstitialAd != null) {
        AdRequest adRequest = new AdRequest.Builder()
                .addTestDevice(getResources().getString(R.string.test_device))
                .build();

        if (adRequest == null) {
            return;
        }

        // HERE'S THE CRASH
        try {
            mInterstitialAd.loadAd(adRequest);
        }catch(Exception e) {
            return;
        }
    }
}

catch 没有捕捉到“loadAd”的崩溃。

我怎样才能捕捉到它,或者至少让它不会让我的应用崩溃?我希望当 loadAd 失败时,不会显示任何广告。

LOGCAT:

A/libc: Fatal signal 5 (SIGTRAP), code 1 in tid 27794 (AdWorker(Defaul)
W/VideoCapabilities: Unrecognized profile 2130706433 for video/avc
I/VideoCapabilities: Unsupported profile 4 for video/mp4v-es

我不知道最后两行是否与这次崩溃有关,但第一行是肯定的。

【问题讨论】:

  • 这是原生 C 库中的错误。你在什么设备上测试?

标签: android crash admob interstitial


【解决方案1】:

有时发生的情况是 Ad 会加载到您的缓冲区中,因此当您尝试调用 loadAd 时,它会崩溃 创建:

    mInterstitialAd = new InterstitialAd(this);
    // set the ad unit ID
    mInterstitialAd.setAdUnitId(getString(R.string.ad_id));

    AdRequest adRequest2 = new AdRequest.Builder()
            .build();
    // Load ads into Interstitial Ads

    mInterstitialAd.loadAd(adRequest2);

    mInterstitialAd.setAdListener(new AdListener() {
        public void onAdLoaded() {
            showInterstitial();
        }
    }); 

同班:

private void showInterstitial() {
    if (mInterstitialAd.isLoaded()) {
        mInterstitialAd.show();
    }
}

【讨论】:

  • 好的,那么解决方案是什么?我确定崩溃发生在“loadAd”行,因为我只是在每行之前打印了一个数字,而当崩溃发生时,“loadAd”行之后的数字永远不会打印。
  • 尝试按照我上面展示的步骤,添加 setAdListener。它应该工作。另外我对你的 Logcat 中的错误不熟悉,这可能是我提到的问题,所以尝试做一次。
  • 哦,我明白了!我会尝试数百次,我会告诉你的。谢谢!
  • 当我想说它同时工作时,它失败了..再次在“loadAd”pffff
  • 你在做哪些测试?
【解决方案2】:

Activtiy_m1.java

public class Activity_m1 extends AppCompatActivity {

    InterstitialAd interstitial;
    Activity mactivity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_m1);
        setTitle("ABCD");
        Advertise.displaym1(getApplicationContext());
    }

    @Override
    public void onBackPressed() {
            Advertise adv = new Advertise();
            adv.disp_adm1();
        finish();
    }
}

Advertise.java

public class Advertise {
    public static InterstitialAd interstitial;

    public static void displaym1(Context act) {
        interstitial = new InterstitialAd(act);
        interstitial.setAdUnitId("ca-app-pub-2621588945556564/3343556333");
        AdRequest adRequest1 = new AdRequest.Builder().build();
        interstitial.loadAd(adRequest1);
    }
    public void disp_adm1() {
        if (interstitial.isLoaded())
            interstitial.show();
    }
}

【讨论】:

  • 你能解释一下这与火力基地的显示方式有什么区别吗?除了静态的态度..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多