0

首先:出现此问题时不会抛出异常。

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

现在我收到了我的 alpha 测试人员的报告,他们的应用在关闭 VideoAd 后关闭。经过一段时间的调查,我意识到谷歌在执行发布前测试时使用的所有设备都有同样的问题(谷歌提供的视频可见)。

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

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

奖励金额和奖励是私有字段,用于实例化活动 onResume 方法中的片段:

@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 后尝试实例化一个片段。

4

1 回答 1

0

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

我学到了什么: 永远不要在活动的生命周期方法(onResume,...)中执行事务,因为当您到达事务代码时,活动可能还没有完全恢复。

相反,在onPostResume方法中执行事务。调用此方法时,可以保证您的活动及其所有片段已完全恢复,并且可以“保存”执行事务。

附带说明:如果您不是绝对需要,请不要在这些方法中执行交易

于 2018-01-23T11:46:36.853 回答