buder

201709015工作日记--上下文的理解,ASM

1.Android上下文理解

  • Android上下文对象,在Context中封装一个所谓的“语境”,Activity、Service、Application都继承自Context,所以在这三者创建时都会创建应用上下文Content
  • 所有的组件共同拥有Application Context,可以通过getApplicationContext()获取
  • Activity中获取Context对象,直接this,匿名内部类指定XXXActivity.this

  Context的作用是用来访问全局信息的,比如每个UI组件的构造函数都是要传入一个Context的。拿TextView来打比方:

TextView textView =newTextView(this);
textview.setText(R.string.balabala);

 

  这里实例化的时候传入了一个this,这个值就是一个Context。

  这里设置了一个在strings.xml文件中预定义的字符串,setText(int resid)函数的源码中是这样的:

publicfinalvoidsetText(intresid){     
    setText(getContext().getResources().getText(resid));    
}

 

  注意这里面使用了getContext()函数去获取全局信息资源,并通过id筛选出自己想要的资源。这里的这个getContext()获取到的上下文,就是我们在实例化TextView时传进去的Context。

  所以,Context是用来协助对象访问全局信息的

  使用的时候要尤其注意,Context传出去,使用完要及时释放掉,因为Context是有一个引用抓取着Activity的,如果Activity生命周期结束后还没有及时释放掉Context,很容易造成内存泄露。

2.几个常用的上下文

this
  即当前的application或activity或service。

getApplication()
  系统提供的单例对象,每个应用只有一个。只能在activity和service(以及application类)中调用,获得应用的application单例对象。

getApplicationContext()
  getApplicationContext()返回应用的上下文,生命周期是整个应用。相对比getApplication获取的对象是一样的,都是应用的application单例对象,但是应用范围更加广,可以例如broadcast receiver中可以使用。

getBaseContext()
  返回由构造函数指定或setBaseContext()设置的上下文,调用该方法时获取一个ContextWrapper初始化为具体的Application、Service、ContextThemeWrapper的context。不建议使用。

getActivity()
  在fragment中获取fragment从属的activity的context,相当于该Activity的activity.this。存在于该activity的生命周期中。

  getContext()
返回当前这个View对象的context。

 

3.今天培训讲了一点点的activity上下文以及管理的东西。   

  activity实际上是继承了context的上下文,只是他自己下面又实现了一些可视化的(不是window、widget)等可视化界面。

  activity -> activityThread -> AMS

 

 

posted on 2017-09-15 16:24  buder  阅读(149)  评论(0编辑  收藏  举报

导航