首先:发生此问题时不会抛出异常。
我的应用目前正在Google Plays封闭式alpha程序中运行。当我使用Android Studio提供的模拟器或使用我自己的Galaxy A5测试应用程序时,一切正常并且符合预期。
现在我收到了我的Alpha测试人员的报告,他们的应用在关闭VideoAd后正在关闭。经过一段时间的调查,我意识到谷歌在执行Pre-Launch-Tests时使用的所有设备都有同样的问题(通过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之后实例化一个片段。
答案 0 :(得分:0)
经过一番研究后,我解决了我的问题。
我学到了什么: 永远不要在活动的生命周期方法中执行交易(onResume,...),因为当您到达交易代码时,活动可能还没有完全恢复。
而是在 onPostResume 方法中执行事务。调用此方法时,可以保证您的活动及其所有片段已完全恢复,并且“保存”以执行事务。
旁注:如果您不是必须,请不要在这些方法中执行交易。