You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin如何实现SplashActivity通过计时器自动Intent跳转其他Activity

Kotlin 实现 SplashActivity 计时自动跳转方案

实现该功能核心需要处理三个点:延迟计时、跳转执行、生命周期绑定(避免用户提前退出页面后计时任务仍运行导致的崩溃、内存泄漏问题),以下是可直接复用的实现方式:


推荐实现方式(Handler 方案,兼容性最佳)

该实现轻量无额外依赖,适配所有Android版本,是生产环境最常用的写法:

  1. 首先确认AndroidManifest.xml中已将SplashActivity配置为应用启动入口:
<activity
    android:name=".SplashActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<!-- 记得把原启动Activity的LAUNCHER配置移除 -->
  1. 编写SplashActivity对应Kotlin代码:
import android.content.Intent
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import androidx.appcompat.app.AppCompatActivity

class SplashActivity : AppCompatActivity() {
    // 启动页展示时长,单位毫秒,常规设置2000-3000即可
    private val splashShowDuration = 2000L
    // 主线程Handler
    private val mainHandler = Handler(Looper.getMainLooper())
    // 跳转任务
    private val jumpTask = Runnable {
        // 替换为你要跳转的目标Activity
        startActivity(Intent(this, MainActivity::class.java))
        // 跳转后销毁启动页,避免按返回键回到启动页
        finish()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)
        // 投递延迟任务,到达指定时长后自动执行跳转
        mainHandler.postDelayed(jumpTask, splashShowDuration)
    }

    override fun onDestroy() {
        // 页面销毁时移除未执行的任务,杜绝内存泄漏和崩溃
        mainHandler.removeCallbacks(jumpTask)
        super.onDestroy()
    }
}

备选实现(CountDownTimer 方案,适合需要展示倒计时的场景)

如果你需要在启动页展示实时倒计时进度(比如“3秒后进入首页”、跳过按钮倒计时),可以用CountDownTimer实现:

import android.content.Intent
import android.os.Bundle
import android.os.CountDownTimer
import androidx.appcompat.app.AppCompatActivity

class SplashActivity : AppCompatActivity() {
    private val splashShowDuration = 3000L
    private var countDownTimer: CountDownTimer? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)

        countDownTimer = object : CountDownTimer(splashShowDuration, 1000) {
            override fun onTick(millisUntilFinished: Long) {
                // 可在此处更新UI,比如给跳过按钮设置剩余秒数文本
                // val remainSecond = millisUntilFinished / 1000
                // skipBtn.text = "跳过 ${remainSecond}s"
            }

            override fun onFinish() {
                startActivity(Intent(this@SplashActivity, MainActivity::class.java))
                finish()
            }
        }.start()
    }

    override fun onDestroy() {
        // 页面销毁时取消倒计时
        countDownTimer?.cancel()
        super.onDestroy()
    }
}

注意事项

  • 不要使用Timer/TimerTask实现跳转,这类组件默认运行在子线程,直接执行页面跳转容易触发线程安全问题,且生命周期绑定逻辑更繁琐。
  • 跳转后必须调用finish()销毁SplashActivity,否则用户按返回键会回到无意义的启动页,不符合常规交互逻辑。
  • 如果启动页需要承载初始化逻辑(检查登录状态、拉取配置、加载广告),不要写死固定延迟,应该等初始化任务执行完成后再触发跳转,固定延迟仅适合纯品牌展示的启动页场景。
  • 不要给SplashActivity设置透明/半透明主题,否则容易出现跳转黑屏、过渡动画异常的问题。

内容的提问来源于stack exchange,提问作者roisul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:36:19