Context Activity Service Application之间的关系
2013-11-12 14:20
525 查看
Context:
1、它描述的是一个应用程序环境的信息,即上下文。
2、该类是一个抽象(abstract class)类,Android提供了该抽象类的具体实现类(后面我们会讲到是ContextIml类)。
3、通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent信息 等。。
Context 的创建时机:
1、创建Application 对象时, 而且整个App共一个Application对象
每个应用第一次启动时会创建Application对象,使用的是ActivityThread.java中的handleBindApplication()方法创建,在该发放中会new一个ContextImpl类,它是Context的子类,再由context.setOuterContext(Application app)方法将当前的Application对象传递到该对象中。
2、创建Service对象时
通过startService或者bindService时,如果系统检测到需要新创建一个Service实例,就会回调handleCreateService()方法,
完成相关数据操作。handleCreateService()函数位于 ActivityThread.java类。同1中一样,也会new一个ContextImpl对象然后将新创建的Service对象传递到ContextImpl对象中
[b][b]3、创建Activity对象时[/b]
[/b]
通过startActivity()或startActivityForResult()请求启动一个Activity时,如果系统检测需要新建一个Activity对象时,就会
回调handleLaunchActivity()方法,该方法继而调用performLaunchActivity()方法,去创建一个Activity实例,并且回调
onCreate(),onStart()方法等, 函数都位于 ActivityThread.java类。同样
[b]也会new一个ContextImpl对象然后将新创建的Activity对象传递到ContextImpl对象中。
[/b]
另外,需要强调一点的是,通过对ContextImp的分析可知,其方法的大多数操作都是直接调用其属性mPackageInfo(该属性类
[b]型为PackageInfo)的相关方法而来。这说[b]ContextImp是一种轻量级类,而PackageInfo才是真正重量级的类。而一个App里的[/b][/b]
[b] 所有ContextIml实例,都对应同一个packageInfo对象。
SharedPerferences对象的来历:
SharedPerferences对象是由context对象调用getSharedPerferences对象得来的,该方法是ContextImpl中实现的方法,其实SharedPerferences只是一个接口他只是定义了XML文件的操作方法,具体的实现是由ContextImpl中的内部类SharedPerferencesImpl来实现的。getSharedPerferences()返回的也是SharedPerferencesImpl对象。
再加一点:
window,activity,和view的关系是这个样子的:
activity中new出一个window,而window(接口)通过这个phonewindow子类来获取一个子类实例。这是一种典型composite模式。再通过
[b][b][b]phonewindow的setContentView在内部使用LayoutInflater来给Window设置View。[/b][/b]
[/b]
[/b]
1、它描述的是一个应用程序环境的信息,即上下文。
2、该类是一个抽象(abstract class)类,Android提供了该抽象类的具体实现类(后面我们会讲到是ContextIml类)。
3、通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent信息 等。。
Context 的创建时机:
1、创建Application 对象时, 而且整个App共一个Application对象
每个应用第一次启动时会创建Application对象,使用的是ActivityThread.java中的handleBindApplication()方法创建,在该发放中会new一个ContextImpl类,它是Context的子类,再由context.setOuterContext(Application app)方法将当前的Application对象传递到该对象中。
2、创建Service对象时
通过startService或者bindService时,如果系统检测到需要新创建一个Service实例,就会回调handleCreateService()方法,
完成相关数据操作。handleCreateService()函数位于 ActivityThread.java类。同1中一样,也会new一个ContextImpl对象然后将新创建的Service对象传递到ContextImpl对象中
[b][b]3、创建Activity对象时[/b]
[/b]
通过startActivity()或startActivityForResult()请求启动一个Activity时,如果系统检测需要新建一个Activity对象时,就会
回调handleLaunchActivity()方法,该方法继而调用performLaunchActivity()方法,去创建一个Activity实例,并且回调
onCreate(),onStart()方法等, 函数都位于 ActivityThread.java类。同样
[b]也会new一个ContextImpl对象然后将新创建的Activity对象传递到ContextImpl对象中。
[/b]
另外,需要强调一点的是,通过对ContextImp的分析可知,其方法的大多数操作都是直接调用其属性mPackageInfo(该属性类
[b]型为PackageInfo)的相关方法而来。这说[b]ContextImp是一种轻量级类,而PackageInfo才是真正重量级的类。而一个App里的[/b][/b]
[b] 所有ContextIml实例,都对应同一个packageInfo对象。
SharedPerferences对象的来历:
SharedPerferences对象是由context对象调用getSharedPerferences对象得来的,该方法是ContextImpl中实现的方法,其实SharedPerferences只是一个接口他只是定义了XML文件的操作方法,具体的实现是由ContextImpl中的内部类SharedPerferencesImpl来实现的。getSharedPerferences()返回的也是SharedPerferencesImpl对象。
再加一点:
window,activity,和view的关系是这个样子的:
activity中new出一个window,而window(接口)通过这个phonewindow子类来获取一个子类实例。这是一种典型composite模式。再通过
[b][b][b]phonewindow的setContentView在内部使用LayoutInflater来给Window设置View。[/b][/b]
[/b]
[/b]
相关文章推荐
- Beginning ARC in iOS 5 Tutorial Part 1
- IOS游戏名字的本地化修改
- Objective-c对c语言都做了哪些扩展?
- Android Activity
- Android 两张图片相互淡出
- android手机系统adb常用的命令
- Android之GPS定位详解
- android高级应用
- android 设置listview 背景选择器
- 重新签名Android pre-install APK
- 隐藏IOS StatusBar
- iOS 设备发送推送通知
- 2.24 Loading Web Pages with UIWebView
- cocos2d-x
- Android之解析json数据
- android 更新SDK 失败解决办法
- 关于android 签名系统的理解
- Android使用GoogleAnalytics
- 用Gradle 构建你的android程序
- 理解活在Iphone中的那些App (三)