Android(Kotlin)创建全局context解决在有些地方获取不到上下文context_kotlin 全局context_nahfang的博客-程序员秘密

技术标签: android  

创建全局context以解决在有些地方获取不到上下文context

首先创建一个类 类名叫MyApplication 如下

class MyApplication : Application() {
    
    companion object{
    
        @SuppressLint("StaticFieldLeak")
        lateinit var context: Context
    }

    override fun onCreate() {
    
        super.onCreate()
        context =applicationContext
    }
}

现在我们来解释一下上面这块代码
我们让MyApplication继承Application类
然后在companion object中定义一个context变量,重写父类的onCreat()方法,然后调用getApplicationContext方法给context赋值,(代码中为kotlin的语法糖写法),这样我们就获得了静态的context变量,由于将Context设置为静态很容易产生内存泄漏 ,所以这个做法有风险,但是这里获取的Application中的Context,并不会出现像获取Activity或者server中的context一样由于生命周期的原因被回收,它在整个应用程序的生命周期内都不会被回收,所以不存在风险。所以我们需要告诉系统这里没有问题,所以这里添加了 @SuppressLint(“StaticFieldLeak”)注解。

上面的大概弄清楚之后,我们需要再做一件事,这个全局context才能使用,那就是初始化。
在AndroidManifest.xml中修改默认的Application为我们的MyApplication类,这样系统初始化时就会初始化MyApplication而不是Application。


    <application
        android:name=".MyApplication" //添加这一句
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        ...
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/nahfang/article/details/109863358

智能推荐

socket编程之socket转串口_结合了socket 和串口接收有影响吗?_monster_330的博客-程序员秘密

---------------------------------------------------------------------------------系统环境:Centos 6.5    开发板:s3c2440---------------------------------------------------------------------------------

POJ 2115 C Looooops (扩展欧几里德算法求模线性方程)__北鸣的博客-程序员秘密

POJ 2115 C Looooops (扩展欧几里德算法求模线性方程)

windows7 问题 集合_chuifuhuo6864的博客-程序员秘密

windows7问题集合 【windows7的任务栏不能添加快捷方式图标?】 解决方法:原因就是去除了快捷图标的小箭头的缘故,所以只需要将快捷方式的小箭头恢复就正常了! 恢复小箭头 需要修改注册表,具体如下: 1.启动注册表编辑器(开始--运行中输入regedit),然后依次展开如下支...

VS Code为什么能这么牛?_爱编程_的博客-程序员秘密

作者:李少侠链接:https://zhuanlan.zhihu.com/p/35303567Visual Studio Code(VS Code)近年来获得了爆炸式...

windows下virtualenv与virtualwrapper的安装与使用_weixin_33862188的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

ILP32、ILP64、LP64、LLP64、64位系统_Huke_abc的博客-程序员秘密

32、ILP64、LP64、LLP64、64位系统Data Type ILP32 ILP64 LP64 LLP64char 8 8 8 8short 16 16 16 16int 32 64 32 32lon

随便推点

总结java方法(函数)传值和传引用的问题_yasi_xi的博客-程序员秘密

转自:http://hi.baidu.com/cpuramdisk/item/84a75b5e78007013da163535【yasi】关于Jav

ubuntu更新source.list源_kunwen123的博客-程序员秘密

ubuntu更新source.list源修改文件/etc/apt/sources.list后刷新列表sudo apt-get updatesudo apt-get upgradesudo apt-get install build-essential

STM32软件调试logic Analyzer-单步执行main()程序_走出地球的博客-程序员秘密

1、开始运行2、停止运行3、准备单步运行4、先从延时程序delay_ls()中跳出,再单步执行。

【CSS 教程系列第 13 篇】什么是 CSS 中的通配符选择器_什么是通配符选择器_Allen Su的博客-程序员秘密

通配符选择器用 * 号表示,它是所有选择器中作用范围最广的,能匹配页面中所有的元素。

学习Objective-C入门教程(全)_huangtingting_object的博客-程序员秘密

原文地址:http://wenku.baidu.com/link?url=YcTL3KKshEXkSCOEiW46FnAEMO78sG44m0y0JtQQysSEXDYB2VUvflaP-_cqB2YsTzxk7-t2htYbUWCXFBbu_8-tfv6YDfDANmlMYXMsW4q

天天喝稀饭-pony的博客_congdi7904的博客-程序员秘密

天天喝稀饭-pony的博客链接:http://www.conjee.com/blog/default.asp ...

推荐文章

热门文章

相关标签