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

Android Studio中Kotlin编写的MainActivity无法创建启动求助

问题描述

在Android Studio中创建新Kotlin项目后,Kotlin编写的MainActivity无法正常启动:

  • 运行后仅显示带ActionBar的空白界面
  • onCreate方法中添加的日志未在Logcat输出,Logcat仅显示:
--------- beginning of crash
--------- beginning of system
--------- beginning of main

而Java编写的Activity运行完全正常,已添加所有必要依赖,执行过清理缓存并重建项目,问题仍存在。

相关配置代码

项目根目录build.gradle

plugins {
    id 'com.android.application' version '8.0.0' apply false
    id 'com.android.library' version '8.0.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.8.21' apply false
}

app模块build.gradle

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-android'
}

android {
    namespace 'com.example.driversupport'
    compileSdk 33

    defaultConfig {
        applicationId "com.example.driversupport"
        minSdk 24
        targetSdk 33
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {

    implementation 'androidx.core:core-ktx:1.10.0'
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.21"
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.9.0'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'


    def nav_version = "2.5.3"

    // Java language implementation
    implementation "androidx.navigation:navigation-fragment:$nav_version"
    implementation "androidx.navigation:navigation-ui:$nav_version"

    // Kotlin
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

    // Feature module Support
    implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

    // Testing Navigation
    androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

    // Jetpack Compose Integration
    implementation "androidx.navigation:navigation-compose:$nav_version"
}

MainActivity.kt

package com.example.driversupport.presentation.ui.activity

import android.os.Bundle
import android.os.PersistableBundle
import android.util.Log
import android.widget.LinearLayout
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.fragment.NavHostFragment
import com.example.driversupport.R

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        setTheme(R.style.Theme_DriverSupport)
        super.onCreate(savedInstanceState, persistentState)
        setContentView(R.layout.fragment_devices)
    }
}

Activity.java

package com.example.driversupport.presentation.ui.activity;

import android.os.Bundle;
import android.util.Log;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.example.driversupport.R;

public class Activity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_devices);
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.DriverSupport"
        tools:targetApi="31">

        <activity android:name=".presentation.ui.activity.MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>

        </activity>

    </application>

</manifest>
问题原因

Kotlin版MainActivity重写了错误的onCreate方法重载:

  • AppCompatActivity默认启动时调用的是onCreate(Bundle?)方法
  • 你重写的是onCreate(Bundle?, PersistableBundle?),这个方法仅在Activity配置了android:persistableMode属性(值为persistAcrossReboots或persistRootOnly)时才会被系统触发
  • 由于你的Manifest中未配置该属性,系统会调用父类的无PersistableBundle参数的onCreate方法,导致你的初始化逻辑(设置主题、加载布局)完全没执行,因此出现空白界面且日志无输出
解决方案

修改MainActivity.kt,将onCreate方法改为正确的重载版本:

package com.example.driversupport.presentation.ui.activity

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.example.driversupport.R

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        setTheme(R.style.Theme_DriverSupport)
        super.onCreate(savedInstanceState)
        setContentView(R.layout.fragment_devices)
        // 添加日志验证
        Log.v("MainActivity", "onCreate executed")
    }
}

修改后重新运行项目,即可看到布局正常加载,Logcat中也会输出对应的日志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:05:09