观看激励视频广告后应用异常返回首页的技术问题咨询
嘿,我来帮你捋捋这个问题!你遇到的这种部分机型上激励视频关闭后跳转到首个主Activity的情况,大概率和Activity启动模式、广告回调逻辑,或者系统内存回收导致的重启有关,我给你拆解几个可能的方向和解决办法:
可能的原因及对应解决方案
1. 检查Activity启动模式配置
很多时候这种异常跳转是因为Activity的启动模式没配置对。比如你的Quiz1Activity如果用了singleTask/singleInstance,或者首个主Activity的启动模式是singleTop/singleTask,广告关闭后系统可能会触发栈内Activity的重组。
- 打开
AndroidManifest.xml,确认Quiz1Activity的android:launchMode是默认的standard(如果被修改过,改回默认试试)。 - 检查主Activity的启动模式,如果设了
singleTask,看看是不是广告回调里不小心触发了主Activity的启动(比如误写了startActivity(new Intent(this, MainActivity.class)))。
2. 排查激励视频的回调逻辑
激励视频的关闭/奖励回调里的代码很可能是问题根源,你有没有在这些回调里做了Activity跳转或者finish当前页面的操作?
- 仔细检查
MobileAds相关的回调实现,比如:
@Override public void onAdClosed() { // 这里有没有调用 finish() 或者跳转主Activity的代码? // 比如不小心写了 startActivity(new Intent(Quiz1Activity.this, MainActivity.class)); } @Override public void onUserEarnedReward(RewardItem rewardItem) { // 奖励发放后有没有异常的页面操作? }
- 建议在回调里加日志,比如
Log.d("AD_DEBUG", "onAdClosed called, current activity: " + this.getClass().getSimpleName()),看看回调触发时当前Activity的状态,确认是不是回调里的逻辑导致了跳转。
3. 系统内存不足导致的Activity重启
如果应用在展示广告时被系统后台回收,广告关闭后系统会尝试恢复之前的Activity,但如果任务栈被破坏,就可能跳转到主Activity。
- 在
Quiz1Activity里重写onSaveInstanceState和onRestoreInstanceState方法,保存页面状态,看看是否触发了恢复逻辑:
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean("isAdShown", true); // 标记广告已展示 Log.d("ACTIVITY_DEBUG", "onSaveInstanceState called"); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); boolean isAdShown = savedInstanceState.getBoolean("isAdShown", false); Log.d("ACTIVITY_DEBUG", "onRestoreInstanceState called, isAdShown: " + isAdShown); // 如果广告已展示,就不要再重复加载广告或做跳转 }
- 同时检查
onCreate方法,当savedInstanceState不为null时,说明是Activity被恢复,这时候不要重复初始化广告或执行页面跳转逻辑。
4. 广告SDK兼容性问题
不同厂商的定制系统对广告页面的处理可能有差异,试试以下操作:
- 确保你用的是最新版本的Google Mobile Ads SDK,在
build.gradle里更新依赖:
implementation 'com.google.android.gms:play-services-ads:22.6.0' // 替换成当前最新版本
- 展示广告前,可以尝试把当前Activity的状态通过
onSaveInstanceState提前保存,避免被系统回收。
5. 用adb排查任务栈状态
你可以通过adb命令查看广告关闭前后的Activity栈变化,确认是跳转还是重启:
adb shell dumpsys activity activities
对比广告关闭前后的栈结构,就能清楚看到是Quiz1Activity被销毁后栈顶变成主Activity,还是有主动跳转的操作。
内容的提问来源于stack exchange,提问作者Todor Valkov
相关产品推荐
相关产品推荐

