不能直接实现开屏广告

splashscreen 不能直接实现开屏广告,尤其是 Android 12+ 的系统级 SplashScreen API,它的设计目的是:

统一冷启动视觉体验不是用来展示广告或延时内容

🔍 为什么系统 SplashScreen 不适合做开屏广告?

限制 说明
✅ 自动消失机制 SplashScreen 会在主 Activity 第一帧绘制完成后立刻移除,不能展示任意时长
✅ 展示内容受限 只能设置主题中的 windowSplashScreenAnimatedIcon,不支持加载网络图、视频、复杂布局
✅ 系统控制动画 动画样式、过渡行为固定,无法插入广告跳过按钮或统计曝光时长
✅ 目的不同 系统 splash 是为了过渡,而广告需要用户停留、点击、跳过,这与设计理念冲突

正确做法:使用主页面或 SplashActivity 承载广告

方法一:主 Activity 中加载广告

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        val splashScreen = installSplashScreen()
        splashScreen.setKeepOnScreenCondition { viewModel.isLoading }

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        showAdIfNeeded()
    }

    private fun showAdIfNeeded() {
        val adView = findViewById<AdContainerView>(R.id.adContainer)
        adView.visibility = View.VISIBLE
        adView.loadAd() // 可加载广点通、穿山甲、优量汇等 SDK 广告
    }
}

installSplashScreen() 只是负责冷启动过渡,广告要靠 View 层加载

方法二:使用 SplashActivity 展示广告(兼容老方案)

class SplashAdActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash_ad)

        AdSdk.loadAd(callback = {
            startActivity(Intent(this, MainActivity::class.java))
            finish()
        })
    }
}

可以添加“跳过”按钮、广告倒计时、点击跳转等功能,更自由控制展示逻辑

推荐实践

目标 推荐方式
启动时展示品牌 + 广告(冷启动) 使用 SplashActivity 展示广告,展示完后再跳转主界面
只做冷启动过渡(不展示广告) 使用系统 SplashScreen API
动态加载广告(如开屏联盟广告) SplashActivity + SDK 实现(支持跳过、曝光统计)

🔧 常用广告 SDK 支持的开屏广告功能

SDK 支持开屏广告 是否可插入在系统 SplashScreen 中
穿山甲(字节跳动) ✅ 是 ❌ 否,必须用普通 Activity 展示
优量汇(腾讯) ✅ 是 ❌ 否
AdMob ✅ 启动插页广告 ❌ 否,需在主界面中展示
百度联盟 ✅ 是 ❌ 否

总结

• ❌ 系统 SplashScreen 不支持广告逻辑、跳过按钮、曝光统计等特性

• ✅ 开屏广告需在 App 启动后通过普通 View 或独立 Activity 实现

• ✅ 推荐方式是主 Activity 中用 FrameLayout 或 PopupWindow 展示广告内容,搭配倒计时或跳过控制。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器