javaandroidkotlinkotlin-coroutineskotlin-multiplatform

Android MainActivity's onCreate() Called Two time (Twice) on Initial Launch After Installing


**dependencies** {
    implementation("androidx.core:core-ktx:1.13.1")
    implementation("androidx.appcompat:appcompat:1.7.1")
    implementation("com.google.android.material:material:1.12.0")
    implementation("androidx.constraintlayout:constraintlayout:2.2.0")
    implementation("androidx.navigation:navigation-fragment-ktx:2.8.4")
    implementation("androidx.navigation:navigation-ui-ktx:2.8.4")
    implementation("com.google.firebase:firebase-config:22.0.1")
    implementation("com.google.android.gms:play-services-measurement-api:22.1.2")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.2.1")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")


**Manifest**
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <uses-feature
        android:name="android.software.leanback"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.touchscreen"
        android:required="false" />
    <uses-feature android:glEsVersion="0x00020000" />

    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

 <application
 android:allowBackup="false"
        android:banner="@mipmap/ic_banner"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:hardwareAccelerated="true"
        android:icon="@mipmap/ic_launcher"
 android:label="@string/app_name"
        android:largeHeap="true"
        android:requestLegacyExternalStorage="true"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.VideoPlayer"
        android:usesCleartextTraffic="true"
        android:windowSoftInputMode="adjustResize"
        tools:targetApi="31">

        <activity
            android:name=".activities.splash.SplashActivity"
            android:exported="true"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>

onCreate:

    override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            binding = ActivitySplashBinding.inflate(layoutInflater)
            window.statusBarColor = ContextCompat.getColor(this, R.color.white)
            setContentView(binding.root)
         Log.d("LOGXX", "onCreate: Splash Activity Create")
    }

I launch then application 1st time then this Splash Activity on Create call twice means two time. Here log show 2 time means activity launch twice.

How to stop this twice I want when application 1st time launch then this activity launch 1 time?

So I want that this problem solve and give suitable solution for my problem.


Solution

  • You can add the following attribute to your SplashActivity in the manifest to prevent multiple instances:

    <activity
        android:name=".activities.splash.SplashActivity"
        android:exported="true"
        android:screenOrientation="portrait"
        android:launchMode="singleTask"> // Add this line in mainfest
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    

    In your SplashActivity:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val contentView = ActivitySplashBinding.inflate(layoutInflater)
        setContentView(contentView.root)
    
        // Add splash screen logic here
        Log.d("LOGXX", "SplashActivity onCreate called")
    }