Android Context and Application Singleton from Lin Guo

http://blog.csdn.net/guolin_blog/article/details/47028975

http://stackoverflow.com/questions/6854265/getapplicationcontext-getbasecontext-getapplication-getparent

http://blog.csdn.net/guolin_blog/article/details/47028975

Firstly, let we talk about the getApplicatoinContext()

这个函数返回的这个Application的上下文,所以是与app挂钩的,所以在整个生命周期里面都是不变的,这个好理解,但是使用的时候要注意,该context是和引用的生命周期一致的,所以和activity生命周期挂钩的任务不要使用该context,比如网络访问,防止内存泄露
Then we will begin to study linguo's article

contextcompat can help use to visit the color, but it has very little relationship with what we will talk about today

那如何计算context的数量呢:

首先来看郭琳在书中给出的全局获取context的方法,可以极大地方便我们进行toast提示等

我们不妨在这里进行一下思维的发散,我们知道Activity 是context的子集,并且activity中包含了UI 的部分,所以说我们不可能利用context来获取view component,只有在fragment这种结构中,利用getActivity() 函数来获取activity实例后,才能够实现。这也说明我们的snackbar的交互模型是针对能够传入view的click 操作的,而context属于全局提示(我们在使用安卓软件的时候也可以看出这种交互方式的端倪)

接下来回到guolin的blog的思路上来

首先我们就来对比一下getapplication 和 getapplicationcontext这两种方法

上面的代码不仅讲到了getApplication 和 getApplicationContext之间返回值的一致性,也告诉我们即使我们不创建一个新的类,也可以进行application 的全局获取,但是这并不符合我们单例的设计模式,下面我们继续比较这两种获取方法

上面已经降到了getBaseContext() 这一个方法,根据stackoverflow的建议,我们知道很多情况下是不建议使用getBaseContext()这个方法的,但是作为实现了context所有功能的类,我们有必要去了解android针对这一部分的设计模式

这样就完成了我们继承关系中的耦合

然后我们继续顺着application往后面讲。之前我们之所以会将application实例的获取 (getApplicationContext()) 放在oncreate函数中,是为了满足生命周期,可以通过过下面的例子进行表示

另外一个错误就是对单例模式的错误认识, 当然如果我们需要很强的context语义,我们可以使用getApplicationContext() 来代替this的赋值,简单来说,总结如下

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s