| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android Context使用详解 -> 正文阅读 |
|
[移动开发]Android Context使用详解 |
一.Context概述 1.Context是一个抽象类,其通用实现在ContextImpl类中。它的主要作用是一个访问application环境全局信息的接口,包括为Activities, Fragments, and Services提供访问resource files, images, themes/styles等相关的类,其具体结构类图如下: 二.Context使用 1.启动Activity 1).java方式
2).kotlin方式
2.创建View, 1).java方式
2).kotlin方式
此外Contexts也包含view需要的一些信息,eg: 1‘. 将dp、sp 转换为像素的设备屏幕尺寸和维度 3.Inflating一个XML布局文件 1).java方式
2).kotlin方式
4.发送广播 1).java方式
2).kotlin方式
5.获取系统Service,eg:发送通知,通知管理获取 1).java方式
2).kotlin方式
6.Application和Activity Context对比 在传递Context参数的时候,如果是在Activity中,我们可以传递this(这里的this指的是Activity.this,是当前Activity的context)或者Activity.this。这个时候如果我们传入getApplicationContext(),我们会发现这样也是可以用的。可是大家有没有想过传入Activity.this和传入getApplicationContext()的区别呢?首先Activity.this和getApplicationContext()返回的不是同一个对象,一个是当前Activity的实例,一个是项目的Application的实例,这两者的生命周期是不同的,它们各自的使用场景不同,this.getApplicationContext()取的是这个应用程序的Context,它的生命周期伴随应用程序的存在而存在;而Activity.this取的是当前Activity的Context,它的生命周期则只能存活于当前Activity,这两者的生命周期是不同的。getApplicationContext() 生命周期是整个应用,当应用程序摧毁的时候,它才会摧毁;Activity.this的context是属于当前Activity的,当前Activity摧毁的时候,它才摧毁。 7.Context的应用场景
大家注意看到有一些NO后面添加了一些数字,其实这些从能力上来说是YES,但是为什么说是NO呢?解释如下: NO1:启动Activity在这些类中是可以的,但是需要创建一个新的task。一般情况不推荐。 8.Context的数量计算 Context个数=Activity数+Service数+1(Application) 三.Context内存泄露问题 1.单例模式导致内存泄漏 1).java demo
2).kotlin demo
上面demo有内存泄露的隐患,如果是在Activity中创建这个单例的话,传入的context为Activity的context,如果想要销毁Activity,但是单例的生命周期是整个应用,导致Activity的内存不能完全释放, 正确的方法是将application context存储在CustomManager.getInstance()中。 application context是一个单例,并且与应用程序进程的生命周期相关联,因此可以安全地存储对它的引用。 如果在组件的生命周期之外需要Context引用,或者它应该独立于传入的Context的生命周期,请使用application context。eg: 1).java方式
2).kotlin方式
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 19:10:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |