让AppGlobals重新获取一下Application的方法?

让AppGlobals重新获取一下Application的方法?

昨天提问过,老师帮忙看下

https://class.imooc.com/course/qadetail/287879


如果之前代码HiRes.getColor实现方式全部改成ContextCompat.getColor(context,resId),感觉封装的HiRes遇到切换暗黑模式的场景就没意义,


老师说的监听到configration变更后,我们让AppGlobals重新获取一下Application也行。,这个重新获取一下Application是怎么实现的?AppGlobel就一个简单的反射


相关代码:

@SuppressLint("PrivateApi")
object AppGlobals {
private var application: Application? = null
fun get(): Application? {
if (application == null) {
try {
application = Class.forName("android.app.ActivityThread")
.getMethod("currentApplication")
.invoke(null) as Application
} catch (ex: Exception) {
ex.printStackTrace()
}
}
return application
}
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
LovelyChubby 2021-05-08 21:45:05

比如我们复写mainactivity 的onconfigrationChaned方法里,我们主动让AppGlobal强制重新执行一次反射?

  • 提问者 默小铭 #1
    override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    activityLogic.hiTabBottomLayout.resizeHiTabBottomLayout()
    when (newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK) {
    Configuration.UI_MODE_NIGHT_YES -> {
    Log.i("黑夜", "旧反射 ${AppGlobals.get().toString()}")
    try {
    val application2: Application = Class.forName("android.app.ActivityThread")
    .getMethod("currentApplication")
    .invoke(null) as Application
    Log.i("黑夜", "新反射 ${application2.toString()}")
    } catch (ex: java.lang.Exception) {
    ex.printStackTrace()
    }

    // 暗黑模式已开启
    recreate()
    }

    Configuration.UI_MODE_NIGHT_NO -> {
    Log.i("黑夜", "${AppGlobals.get().toString()}")
    // 暗黑模式已关闭
    recreate()
    }
    }
    }

    //结果
    2021-05-09 00:05:42.395 32444-32444/zs.xmx.hiframe I/黑夜: 旧反射 zs.xmx.hiframe.HiApplication@46d24
    2021-05-09 00:05:42.395 32444-32444/zs.xmx.hiframe I/黑夜: 新反射 zs.xmx.hiframe.HiApplication@46d24

    老师,这种实现方式不行,验证过重新反射的application和之前的一样,只有退出整个App重新打开,才会更新内存地址

    2021-05-09 00:10:05
  • 这样子啊,那就不使用application 了,可以使用activityManager.top去获取res各种资源?

    2021-05-09 14:09:15
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师