您的位置:首页 > 移动开发

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: