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

Android清单<application>及name属性的作用与扩展用途问询

Android Kotlin 中 Manifest 里 <application> 节点及 name 属性详解

1. 应用清单文件中 <application> 节点的作用

  • 是整个应用的全局配置容器,Android系统靠这个节点识别应用的整体特征
  • 统一声明应用包含的所有核心组件:Activity、Service、BroadcastReceiver、ContentProvider这些组件必须在此节点下注册,才能被系统识别和调用
  • 配置应用的全局默认属性:比如图标(icon)、应用名称(label)、全局主题(theme)、是否允许备份(allowBackup)等,这些属性会作为所有组件的默认值,组件可单独覆盖配置
  • 定义应用级的全局规则:比如权限要求、硬件兼容配置、支持的语言方向等,为整个应用提供统一的运行环境配置
  • 是应用与系统交互的核心入口:系统启动应用时,会优先读取该节点的配置信息,完成应用的初始化准备

2. <application> 节点中 name 属性的意义及 .BaseApplication 的其他用途

name 属性的意义

name 属性用于指定应用的自定义Application子类。如果不指定,系统会默认使用框架自带的android.app.Application类实例。指定后,应用启动时会优先实例化这个自定义子类,而非默认的Application类。

指定 .BaseApplication 的其他核心用途(除优先实例化外)

结合你提供的代码示例,还有以下实用场景:

  • 全局资源/状态的统一管理:示例中BaseApplication通过lazy初始化数据库实例,整个应用的Activity、ViewModel等组件都能通过application上下文获取这个全局唯一的数据库实例,避免重复初始化,保证数据一致性
  • 应用级初始化操作入口:可以在onCreate()方法中完成全局初始化,比如第三方SDK(统计、推送)启动、全局变量赋值、全局异常捕获配置等,这些操作仅在应用启动时执行一次
  • 强类型全局上下文访问:默认application是Application类型,自定义子类后,可直接强转为BaseApplication,省去频繁类型转换的麻烦,还能直接访问子类中定义的属性(比如示例里的database)
  • 全局生命周期监听:重写onTerminate()、onLowMemory()、onTrimMemory()等方法,监听应用的全局生命周期事件,及时做资源释放或性能优化

附相关代码示例

Android 清单文件(AndroidManifest.xml)

<application
    android:name = ".BaseApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.Forage">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/Theme.Forage.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

BaseApplication 类代码

class BaseApplication : Application() {
    val database: ForageDatabase by lazy {
        ForageDatabase.getdatabase(this)
    }    
}

调用 BaseApplication 的示例代码

private val viewModel: ForageableViewModel by activityViewModels {
    ViewModelFactory(
        (activity?.application as BaseApplication).database.ForageableDoa()
    )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:40:51