Android学习笔记2-1--组件0--Context
来源:互联网 发布:淘宝活动时间表 编辑:程序博客网 时间:2024/05/19 23:58
一、Context
1.1 Context简单介绍
Context是维持Android程序中各组件能够正常工作的一个核心功能类。
ContextImpl是Context的实现类,而ContextWrapper是Context的包装类。ContextWrapper构造函数中必须包含一个真正的Context引用mBase,且该wrapper提供attachBaseContext用于给该引用指定真正的Context对象。调用该类的方法都会被转向其所包含的真正的Context对象。如Activity在创建时会new一个ContextImpl对象并在attach方法中关联它。
Context类型包括Application、Service和Activity。它们具体Context的功能是由ContextImpl实现的。
Context类型不包括Receiver和Provider,它们所持有的Context是其他地方传过来的。
一个应用程序中:Context数量=Activity数量+Service数量+1。
1.2 Context关键函数
getApplication返回结果为同个全局对象Application,getApplicationContext返回也是Application对象,不过返回类型为Context,看看它实现:
@Override public Context getApplicationContext() { return (mPackageInfo != null)?mPackageInfo.getApplication():mMainThread.getApplication(); }
上面代码中mPackageInfo包含当前应用的包信息、比如包名、应用的安装目录等。第三方应用包信息mPackageInfo不可能为空,getApplication返回的对象和getApplicationContext是同一个。对于系统应用包信息有可能为空,返回的是什么具体就不深入研究。
1) 服务操作
// 返回系统级service句柄public abstract Object getSystemService(String name);public abstract String getSystemServiceName(Class<?> serviceClass);public abstract ClassLoader getClassLoader();public abstract PackageManager getPackageManager();// service之Database和SharedPreferencespublic abstract SQLiteDatabase openOrCreateDatabase(...);public abstract SharedPreferences getSharedPreferences(...);// service之AssetManager和ResourcesManagerpublic abstract AssetManager getAssets();public abstract Resources getResources();// Directorypublic abstract File getDir(String name, int mode);public abstract File getExternalFilesDir(String type);// Displaypublic abstract Display getDisplay();
2) 消息操作
// 返回当前进程的主线程的Looper,此线程分发调用给应用组件(activities, services等)public abstract Looper getMainLooper();public void registerComponentCallbacks(ComponentCallbacks callback) { getApplicationContext().registerComponentCallbacks(callback);}public void unregisterComponentCallbacks(ComponentCallbacks callback) { getApplicationContext().unregisterComponentCallbacks(callback);}
3) 组件操作
public abstract PackageManager getPackageManager();public abstract ApplicationInfo getApplicationInfo();public abstract Context getApplicationContext();public abstract ContentResolver getContentResolver();// 这个方法在onCreat之前就开始运行了attachBaseContext()// 启动新的activitypublic abstract void startActivity(Intent intent, Bundle options);public abstract void startActivities(Intent[] intents, Bundle options);// 连接(断开)以及启动(停止)应用服务public abstract boolean bindService(Intent service, ServiceConnection conn, int flags);public abstract void unbindService(ServiceConnection conn);public abstract ComponentName startService(Intent service);public abstract boolean stopService(Intent service);// 注册(注销)BroadcastReceiver,且它将在主activity线程中运行public abstract Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler);public abstract void unregisterReceiver(BroadcastReceiver receiver);// 广播intent,异步机制public abstract void sendBroadcast(Intent intent, String receiverPermission, int appOp);public abstract void sendOrderedBroadcast(Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras);
4) 主题操作
@Overridepublic void setTheme(int resid) { mThemeResource = resid; initializeTheme();}@Overridepublic Resources.Theme getTheme() { if (mTheme != null) { return mTheme; } mThemeResource = Resources.selectDefaultTheme(mThemeResource, getApplicationInfo().targetSdkVersion); initializeTheme(); return mTheme;}
二、ComponentCallbacks2
ComponentCallbacks2(继承于ComponentCallbacks)是一个接口,主要是常用的Application、Activity、Service、ContentProvider等应用程序组件的回调API集。
// 当系统内存不足时,可以通过实现该方法去释放内存或不需要的资源,系统会自动调用该方法void onLowMemory();// 当系统内存不足时,所有后台程序(不是指后台运行的进程)都被杀死时,系统会自动调用该方法void onTrimMemory(int level);// 当设备配置发生改变,而所在组件还在运行时,系统就会调用该方法去运行自定义的代码(需要manifest设置)void onConfigurationChanged(Configuration newConfig);
参考:
[1] ConcurrentHashMap介绍
[2] Android中Context用法详解
[3] Android源码分析-全面理解Context
- Android学习笔记2-1--组件0--Context
- Android Context---学习笔记
- Android学习笔记2---组件
- Android学习笔记之Context
- Android学习笔记2:Android四大组件
- Android 组件学习笔记
- Android学习笔记2-1--组件2--Provider
- Android学习笔记2-1--组件1--Application
- Android学习笔记2-1--组件3--Reciver
- Android学习笔记2-1--组件4--Service
- Android学习笔记2-1--组件5--Activity
- Android学习笔记2-1--组件6--Fragment
- 学习笔记<2>Android基本四大组件
- 学习笔记1:Android 的应用程序组件
- 学习笔记--《Android内核剖析》Context
- Android学习笔记--全局获取Context
- Android学习笔记--Context到底是什么?
- android组件ListView学习笔记
- Unity3D中 使模型变成变透明
- 配置JDK-1.8
- Android学习笔记1-4--机制1--JNI
- 34. OP-TEE中system call的实现
- BZOJ 2321 [BeiJing2011集训] 星器
- Android学习笔记2-1--组件0--Context
- Avro与JAVA
- Linux下修改Mysql的用户(root)的密码
- 自动布局Masonry的简单介绍
- Android学习笔记2-1--组件1--Application
- Linux进程间通信——使用信号量
- centos配置jdk环境变量
- 《统计学习方法》第7章 课后题答案
- Java基础学习总结——Java对象的序列化和反序列化