//内容来自安云网
接触android开发后,许多东西都要百度查阅,后来发现有点零碎,掌握的不够系统,甚至有的东西很容易遗忘。所以才有了这篇博文,或许可以说这系列博文吧(后面会慢慢整理)。 //内容来自AnYun.ORG 适用者说明:系统了解Context,但又不想看英文API的读者。如果想快速了解Context,这篇可能不适合,还是去百度其他的吧。 声明:本文主要参考API文档,及部分google翻译。 1、Context概述类位置:android.content.Context 类声明:public abstract class Context extends Object //直接继承java.lang.Object类 直接子类:ContextWrapper和MockContext 
ContextWrapper:代理执行Context,将其所有调用简单地委托给另一个Context。许多间接子类继承自该类。
MockContext:一个模拟的上下文类。
间接子类:有众多,不一一列举,只提一个刚开始学android时比较重要的:Application类 类位置:android.app.Application 类声明:public class Application extends ContextWrapper implements ComponentCallbacks2 详见另一博文【跟着API看anroid之Application——android.app.Application】 Context类说明:可以理解为一个接口(抽象类),它提供了有关应用程序的全局信息。从它继承或者从它的直接或间接子类继承,那么继承的子类就可以拿到应用程序的全局信息。全局信息指: 它允许访问特定于应用程序的资源和类,以及对诸如启动活动,广播和接收意图等应用程序级操作的上调。
2、Context的常量
接上表 怎么这么多的静态常量啊~~~~感慨之余也体会到Context类的基础性及重要性。继续,接上表
至此Context的静态常量全部看完。根据Context类的说明,当想要拿到全局的信息时,可以通过寻找静态常量的方式得到。上面已经出现过几个方法了,下面,继续跟着API分析Context类的方法。
3、Context的抽象公有函数在开始之前,需要说明Context的所有方法存在一个特点,及全部都为abstract public方法,具体实现由子类来。为了加深理解,下面对函数的整理,不完全按照API的顺序来。 3.1重点的几个函数本节,将首先整理一下,在Context常量部分提到的几个函数。
根据服务的类名,返回系统级服务的句柄。参数为“所需要服务的类别”,如常量中获取的那一些Manager类。
如:WindowManager.class.getName()//获得Class类型,作为参数。
PS: class.getName();//含包名 class.getSimpleName();//不含包名
Note:通过这个API获得的系统服务可能与它们从中获得的上下文密切相关。 一般来说,不要在各种不同的上下文(活动,应用程序,服务,提供者等)之间共享服务对象,
-----------------------------------------------------函数分割线--------------------------------------------------
方法的重载,功能一样,参数变为字符串,返回的对象变成基类Object。所以用时需要对返回值进行强制类型转换。可选的参数包含上文介绍的所有Context的String类型的常量。通过Context.WINDOW_SERVICE;类名点的方式使用。
-----------------------------------------------------函数分割线--------------------------------------------------
连接到应用程序服务,根据需要创建它。 这定义了您的应用程序和服务之间的依赖关系。 给定的conn在创建时会收到服务对象,并被告知它是否会死亡以及什么时候重新启动。 只要存在调用上下文,该服务就会被系统认为是必需的。 例如,如果此Context是一个已停止的Activity,则该服务将不需要继续运行,直到活动恢复。如果您没有绑定到给定服务的权限,则此函数将引发SecurityException。

参数说明:
Intent:标识要连接的服务。 Intent可以指定显式组件名称或逻辑描述(动作,类别等)以匹配由服务发布的IntentFilter
ServiceConnection:在服务启动和停止时接收信息。 这必须是有效的ServiceConnection对象; 它不能为空。
int:flag为上文介绍的Context常量,绑定的操作选项
返回值说明:如果您已成功绑定到该服务,则返回true; 如果未建立连接,则返回false,因此您将不会收到服务对象。
-----------------------------------------------------函数分割线--------------------------------------------------
为给定的应用程序名称返回一个新的Context对象。 此上下文与启动时的命名应用程序相同,其中包含相同的资源和类加载器。 每次调用此方法都会返回一个Context对象的新实例; 上下文对象不共享,但它们共享公共状态(Resources,ClassLoader等),因此Context实例本身相当轻量级。可能会抛 PackageManager.NameNotFoundException 和 SecurityException异常
参数说明: String packageName:应用的包名:通过context.getPackageName();函数来获取包名。 int flags:为上文介绍的Context常量,Option flags, one of CONTEXT_INCLUDE_CODE or CONTEXT_IGNORE_SECURITY .
3.2API中的其他函数 下面的函数不具体展开说明,只是进行分类处理,因为不是只对API的翻译工作,而是通过读API加深对Context类的了解。
check特征的函数:检查调用过程是不是已经被允许了(被授予了相应权限)。
返回值说明:如果被允许返回PERMISSION_GRANTED(许可授予);否则返回 PERMISSION_DENIED (没有权限)。该两个值为PackageManager类的常量,值分别为:0 (0x00000000)和 -1 (0xffffffff)
-----------------------------------------------------函数分割线--------------------------------------------------
创建Context的特征函数:根据不同条件返回当前上下文的一个新Context对象,如上面介绍的createPackageContext 函数 -----------------------------------------------------函数分割线--------------------------------------------------
abstract String[] databaseList();
abstract String[] fileList();
abstract boolean deleteDatabase(String name);
abstract deleteFile(String name);
数据库及文件相关的函数操作。
-----------------------------------------------------函数分割线--------------------------------------------------
上 面是检查的功能,该函数为执行,对应起来很好理解。 -----------------------------------------------------函数分割线--------------------------------------------------
get类函数,为重点。详细列出 getApplicationContext(); getApplicationInfo(); getAssets(); getCacheDir(); getClassLoader(); getCodeCacheDir(); getColor(int id); getColorStateList(int id); getContentResolver(); getDataDir(); getDatabasePath(String name); getDir(String name, int mode); getDrawable(int id); getExternalCacheDir(); getExternalCacheDirs(); getExternalFilesDir(String type); getExternalFilesDirs(String type); getExternalMediaDirs(); getFileStreamPath(String name); getFilesDir(); getMainLooper(); getNoBackupFilesDir(); getObbDir(); getObbDirs(); getPackageCodePath(); getPackageManager(); getPackageName(); getPackageResourcePath(); getResources(); getSharedPreferences(String name, int mode); getString(int resId, Object...formatArgs);//(int resId); getSystemService(Class<T> serviceClass); getSystemService(String name); getSystemServiceName(Class<T> serviceClass); getText(int resId); getTheme(); getWallpaper(); getWallpaperDesiredMinimumHeight(); getWallpaperDesiredMinimumWidth(); -----------------------------------------------------函数分割线--------------------------------------------------
总算告一段落了。
后面还有注册/注销广播接收器、发送广播、开启Activity、开启关闭Service等函数。 4、Context总结所谓总结,其实是对个人收获的总结,通过仔细看了一天的API,基本可以上掌握了Context类。许多常量、许多函数,对于刚开始进行android开发的我来说,已经有了了解,在实际中用到的话,可以快速查阅使用。make it
本文标题:
跟着API看anroid之Context——android.content.Context
安云网
|