1. 程式人生 > >201709015工作日記--上下文的理解,ASM

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

上下文 wid broadcast 繼承 on() mil 調用 tac ams

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

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