也谈Android中的Context(1)
来源:互联网 发布:养老保险商业险 知乎 编辑:程序博客网 时间:2024/04/30 07:46
对于Android中的Context类,对于常年致力于移动开发的码农而言似乎也既熟悉又陌生。在Google api中对其介绍如下:
Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.
由上可知,这个类提供了一个诸如执行Activity,发送广播,接收Intent等的入口。通过考察其继承结构,可以知道它是一个抽象类,ContextWrapper是其重要的直接子类
其实仔细分析Android中的类结构,能发现其中的精巧之处,我们熟知的Activity,Application,Service是这样被布局在一盘大棋上。
仅通过这一点了解,再去考察网上随处可见的文章,便可发现很多问题。诸如一段多处被引用的文字如下:
------------------------------------------------------------------------------------------------------------------------------------------------
Context字面意思上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄,很多方法需要通过 Context才能识别调用者的实例,比如说Toast的第一个参数就是Context,一般在Activity中我们直接用this代替,代表调用者的 实例为Activity,而到了一个button的onClick(View view)等方法时,我们用this时就会报错,所以我们可能使用ActivityName.this来解决,主要原因是因为实现Context的类主要有Android特有的几个模型,Activity、Service以及BroadcastReceiver。
------------------------------------------------------------------------------------------------------------------------------------------------
这段话中至少出现了两处错误:
1.类不为long型
2.BroadcastReceiver并不是实现Context的类
这里附带一句,很多地方把Context直译为 上下文,相应把ContextMenu译为 上下文菜单等,在最近的一次面试里我曾问道关于Context的理解,答曰:Context就是上下文。这个回答无异于“Activity就是活动”。随着Android开发近年的火爆,各种简单的翻译抄袭和充斥着各种误导的文章比比皆是,其实这时回归本源反而是最好的方式。
下面再探讨一下一个应用中会建立多少个Context的实例的问题,我们可以找到的比较好的答案可能如下:
总Context实例个数 = Service个数 + Activity个数 + 1(Application对应的Context实例)
然仔细分析,也会发现其中的一些变数。
首先,还是从类的继承结构来看,例如在应用中有用到ActivityGroup,这个公式直接就跪了。
第二,只有实例化了的Activity才会生成Context,例如我们写了一个通用的CustomActivity,它就可能生成多个Context,又如一次操作中未进入的Activity,Context就不会生成。当然对于公式的理解如果是“启动的Activity个数”,这一点并没有问题。
- 也谈Android中的Context(1)
- Android中的Context<1>
- Android中的Context
- [转]Android中的Context
- Android中的Context
- Android中的Context详解
- Android中的Context详解
- android中的context简介
- 关于Android中的Context
- Android中的Context理解
- Android中的Context详解
- Android中的Context详解
- android中的context是什么
- android中的Context类
- Android中的Context详解
- Android中的Context详解
- 关于Android中的context
- Android中的Context
- 三个重要的同余式——威尔逊定理、费马小定理、欧拉定理 + 求幂大法的证明
- Hash欢乐赛
- Android 图片的浏览、缩放、拖动和自动居中
- C/C++指令 #undef ,#ifdef, #ifndef,#if的用法
- C#:USB设备枚举(二)设备枚举API
- 也谈Android中的Context(1)
- 基于 GVim 的 C/C++ IDE -- VimLite 介绍
- 项目开始编码前应确认哪些信息?
- 如何在Linux下格式化U盘以及修改卷标
- Microsoft Excel 2010错误:"此工作簿包含嵌入对象。Microsoft Excel 可能无法从这些对象中删除个人信息。"
- suse linux安装cmake时ccmake没有安装上的原因
- 向其他软件窗口、控件发送消息的方法
- 神奇输入法Fleksy免费开放Fleksy SDK,已集成多款应用
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解