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

Android中多次修改Application类定义的变量值不生效问题

问题成因

你在按钮点击事件中每次都调用App()手动创建新的App类实例,每个新实例的week属性初始值都是0,执行+1操作后返回值自然恒为1,并没有使用整个应用生命周期内系统创建的唯一全局Application实例。

修复方案

步骤1:注册自定义Application类

首先要在项目的AndroidManifest.xml中声明你自定义的App类,保证系统初始化时使用你定义的Application实现:

<application
    android:name=".App"
    <!-- 其他原有application配置,比如icon、label等保持不变 -->
    >
    <!-- 四大组件的注册内容保持不变 -->
</application>

步骤2:调用全局唯一实例修改属性

不要手动创建App实例,使用系统生成的全局实例即可,有两种常用调用方式:

方式1:在Activity中直接获取

Activity自带application属性,强转为自定义的App类即可使用:

// 按钮点击事件内的代码
val app = application as App
val week = app.getNextWeek()
println(week)

方式2:全局单例调用(适配全场景)

可以在App类中提前存储自身实例,后续任何位置都可以直接调用,不需要强转:
首先修改App.kt代码:

class App :Application(){
    companion object {
        // 全局存储Application实例,对外只暴露读权限
        lateinit var instance: App
            private set
    }

    var week :Int = 0

    override fun onCreate() {
        super.onCreate()
        // 应用初始化时赋值实例
        instance = this
    }

    fun getNextWeek(): Int{
        week += 1
        return week
    }
}

之后点击事件的代码可以直接写为:

val week = App.instance.getNextWeek()
println(week)

修改完成后多次点击按钮即可依次输出1、2、3、4的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:45:00