首先:当发生此问题时,不会抛出任何异常。
我的应用程序目前运行在谷歌播放关闭的alpha程序。当我使用Android提供的仿真器或者使用我自己的GalaxyA5测试这个应用程序时,一切都很好,一切都如愿以偿。
现在我收到了我的阿尔法测试员的报告,他们的应用程序在关闭VideoAd之后就要关闭了。经过一段时间的调查后,我意识到谷歌在进行启动前测试时使用的所有设备都有同样的问题(由谷歌提供的视频可以看到)。
因为没有异常抛出,所以我完全不知道如何调试这种行为。下面是onRewarded方法的代码(侦听器的其他方法不包含任何代码):
@Override
public void onRewarded(RewardItem rewardItem) {
int amount = calculateAdReward(rewardItem.getAmount());
updateCoins(amount);
rewardedAmount = amount;
rewarded = true;
}在activitys onResume-方法中,用于实例化片段的私有字段是rewardedAmount和used:
@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之后实例化一个片段。
发布于 2018-01-23 11:46:36
经过一番研究,我解决了我的问题。
我学到的是:从不在活动的生命周期方法 (onResume,.)中执行事务因为当您到达事务代码时,活动可能还没有完全恢复。
相反,在onPostResume方法中执行事务。当调用此方法时,将保证您的活动和它的所有片段都已完全恢复,执行事务是“保存”。
顺便提一句:如果您不一定要使用,则不要在这些方法中执行事务。
https://stackoverflow.com/questions/47383809
复制相似问题