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

使用Hilt注入依赖时,自定义启动类调用Activity出现空白页问题

问题分析与解决方案

核心错误点

  • 禁止手动实例化Application类:ExampleApplication被@HiltAndroidApp注解,属于Android系统托管的应用核心类,系统会在APP启动时自动创建并初始化它,你不需要也不能通过ExampleApplication()手动创建实例,必须在AndroidManifest.xml中保留对它的配置。
  • 禁止直接实例化Activity类:ExampleActivity是被@AndroidEntryPoint注解的Activity组件,Android的Activity由系统管理生命周期,直接ExampleActivity()只是创建了一个普通对象,不会触发Activity的生命周期(如onCreate),也无法让Hilt完成依赖注入,自然不会显示任何UI内容。

正确实现步骤

1. 修正AndroidManifest.xml配置

确保ExampleApplication被指定为应用类,同时将MainActivity设为启动页,且ExampleActivity完成注册:

<?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:name=".ui.ExampleApplication" <!-- 必须保留该配置 -->
        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.App"
        tools:targetApi="31">
        <!-- 设置MainActivity为启动页 -->
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:label="@string/app_name"
            android:theme="@style/Theme.App">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data
                android:name="android.app.lib_name"
                android:value="" />
        </activity>
        <!-- 注册ExampleActivity -->
        <activity
            android:name=".ExampleActivity"
            android:exported="true"
            android:theme="@style/Theme.App" />
    </application>

</manifest>

2. 给MainActivity添加Hilt注解

启动页MainActivity需要被Hilt管理,必须添加@AndroidEntryPoint注解,再通过Intent启动ExampleActivity:

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            AppTheme {
                // 可添加MainActivity自身UI,或直接跳转ExampleActivity
                Button(onClick = {
                    startActivity(Intent(this@MainActivity, ExampleActivity::class.java))
                    // 若不需要保留MainActivity,可调用finish()关闭
                    // finish()
                }) {
                    Text(text = "打开ExampleActivity")
                }
            }
        }
    }
}

3. 保持ExampleActivity的正确配置

确保ExampleActivity的@AndroidEntryPoint注解和生命周期逻辑正常:

@AndroidEntryPoint
class ExampleActivity : ComponentActivity() {
    @RequiresApi(Build.VERSION_CODES.N)
    override fun onCreate(instance: Bundle?) {
        super.onCreate(instance)
        setContent {
            AppTheme {
                Surface(modifier = Modifier.fillMaxSize()) {
                    // 此处添加ExampleActivity的UI内容
                    Text(text = "ExampleActivity页面内容")
                }
            }
        }
    }
}

关键说明

  • @HiltAndroidApp注解的Application类必须在Manifest中指定,系统会自动初始化Hilt的依赖容器,所有被Hilt注解的组件(Activity、Fragment等)都依赖该容器完成注入。
  • 所有使用@AndroidEntryPoint的Activity都必须在Manifest中注册,且通过Intent启动,这样系统才能正确处理生命周期和Hilt注入流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:11:06