当 RewardedVideoAd 关闭时应用程序关闭。在 AdClose 上显示片段?

App closes when RewardedVideoAd is closed. Show Fragment onAdClose?

首先:出现这个问题时没有异常抛出。

我的应用目前 运行 在 Google 播放封闭的 alpha 程序。当我使用 Android Studio 提供的模拟器或使用我自己的 Galaxy A5 测试该应用程序时,一切正常且符合预期。

现在我收到 alpha 测试人员的报告,他们的应用程序在关闭 VideoAd 后关闭。经过一段时间的调查,我发现 google 在执行启动前测试时使用的所有设备都存在相同的问题(在 Google 提供的视频中可见)。

由于没有抛出异常,我完全不知道如何调试此行为。 以下是onRewarded方法的代码(监听器的其他方法不包含任何代码):

@Override
public void onRewarded(RewardItem rewardItem) {
    int amount = calculateAdReward(rewardItem.getAmount());
    updateCoins(amount);
    rewardedAmount = amount;
    rewarded = true;
}

rewardedAmount 和 rewarded 是私有字段,用于实例化 onResume-method 活动中的片段:

@Override
protected void onResume() {
    super.onResume();
    mAdVideo.resume(this);
    if(rewarded){
        loadFragment(RewardFragment.newInstance(rewardedAmount);
        rewardedAmount = 0;
        rewarded = false;
    }
}

我的目标是在用户获得奖励后显示一个包含奖励金额的片段。我的第一次尝试如下:

@Override
public void onRewarded(RewardItem rewardItem) {
    int amount = calculateAdReward(rewardItem.getAmount());
    updateCoins(amount);
    loadFragment(RewardFragment.newInstance(amount));
}

失败了,因为我试图在调用 saveInstanceState 后实例化片段。

经过一番研究,我解决了我的问题。

我学到了什么: 切勿在 activity 的生命周期方法(onResume,...)内执行事务,因为当您到达您的交易代码。

相反,在 onPostResume 方法中执行交易。当这个方法被调用时,保证你的activity和它的所有分片已经完全恢复并且"save"执行一个事务。

旁注:如果不是绝对必要,请不要在这些方法中执行事务