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
相关产品推荐
相关产品推荐

