您好,登錄后才能下訂單哦!
【一】Context的作用:訪問全局信息
Context是訪問全局信息的接口,比如說應(yīng)用程序的資源(圖片資源、字符串資源、其他資源...),
所以一些常用組件就會(huì)繼承Context,目的就是為了訪問資源,比如說Activity以及將要學(xué)習(xí)的Service。
創(chuàng)建項(xiàng)目來看下如何通過Context進(jìn)行資源的訪問。
public class MainActivity extends Activity{ private TextView tv; @Override protected void onCreate(Bundle saveInstanceState){ super.onCreate(saveInstanceState); tv = new TextView(this); // 這里傳入?yún)?shù)必須有一個(gè)Context,因?yàn)檫@個(gè)TextView也需要訪問一些資源、全局信息 // Activity也是Context的子類,所以可以傳入this tv.setText("HelloAndroid"); //也可通過 R.id.hello_world 訪問string.xml中的字符串資源 setContentView(tv); } }
通過查看setText()方法的源碼:
setText(int resid){setText(getContext().getResources().getText(resid));}
首先通過getContext()獲取與它相關(guān)的Context對(duì)象,
也就是TextView所保留引用(傳入的那個(gè)參數(shù))的Context對(duì)象,
也就是MainActivity的實(shí)例;
然后通過getResources()獲取當(dāng)前程序的資源實(shí)例,
再通過getText(),給它一個(gè)id就可以返回資源的字符串了。
這就是這個(gè)方法的內(nèi)部實(shí)現(xiàn)。
也就是Android中,如果想訪問全局信息,必須通過Context。
除了可以獲取字符串,還能獲取其它資源,例如圖片:
ImageView iv = new ImageView(); iv.setImageResource(R.mimap.ic_launcher); setContentView(iv);
【二】Application的用途
很多情況下,我們需要在多個(gè)組件之間進(jìn)行數(shù)據(jù)的共享,Android為我們提供了一種機(jī)制。
Context可以作為全局信息共享的橋梁,所以我們可以用Context進(jìn)行信息的共享。
我們可以創(chuàng)建一個(gè)類,叫做App,繼承于Application。
public class App extends Application{ }
然后打開AndroidManifest.xml文件,
添加斜體字中的信息,<application android:name=".App" ……>,
通過這種方式,我們就自定義了Android的Application ,
而Application才是真正的全局上下文對(duì)象。
在MainActivity中可以通過getApplicationContext()方法,
就可以獲得Application全局對(duì)象。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。