Android首次启动SplashActivity的onCreate被调用两次的解决方法
解决SplashActivity首次启动onCreate被调用两次的问题
以下是针对该问题的排查方向和解决方案:
设置Activity启动模式
给SplashActivity添加singleTask启动模式,避免系统重复创建实例,修改Manifest中的Activity配置:<activity android:name=".activities.splash.SplashActivity" android:exported="true" android:screenOrientation="portrait" android:launchMode="singleTask"> <!-- 添加这一行 --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>排查Firebase组件影响
项目中引入的Firebase Config和Play Services Measurement可能会触发进程重启。可以暂时移除这两个依赖,测试是否还会出现启动两次的情况:// 暂时注释这两行 // implementation("com.google.firebase:firebase-config:22.0.1") // implementation("com.google.android.gms:play-services-measurement-api:22.1.2")如果问题消失,说明是Firebase初始化导致的,可以将Firebase的初始化延迟到Splash之后的主Activity中执行。
清理备份相关配置
虽然设置了android:allowBackup="false",但保留的fullBackupContent可能存在潜在影响,尝试移除该配置:<application android:allowBackup="false" android:banner="@mipmap/ic_banner" <!-- 移除或注释这一行 --> <!-- android:fullBackupContent="@xml/backup_rules" --> ...>优化主题配置
检查应用主题@style/Theme.VideoPlayer,确保添加必要的配置变更监听,避免系统因配置变化重启Activity:<style name="Theme.VideoPlayer" parent="..."> ... <item name="android:configChanges">orientation|screenSize|keyboardHidden</item> </style>添加重复启动拦截逻辑
在SplashActivity中添加标记,避免重复创建实例:private var isInitialized = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (isInitialized) { finish() return } isInitialized = true binding = ActivitySplashBinding.inflate(layoutInflater) window.statusBarColor = ContextCompat.getColor(this, R.color.white) setContentView(binding.root) Log.d("LOGXX", "onCreate: Splash Activity Create") }
内容的提问来源于stack exchange,提问作者Sajawal Hussain
相关产品推荐
相关产品推荐

