Android基礎(chǔ)知識(shí)—Context理解及使用

Context是Android中一個(gè)非常重要的概念,用于訪問全局信息荐绝,幾乎所有的基礎(chǔ)組件都繼承自 Context侣灶,理解 Context 對(duì)于學(xué)習(xí) Android 四大基本組件非常有幫助才漆。

1. Context作用

新建一個(gè)LearnContext工程乾胶,看如何通過Context來進(jìn)行資源的訪問。

public class MainActivity extends AppCompatActivity {
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        tv = new TextView(MainActivity.this); //可只寫this
//        tv.setText("Hello Android");
        tv.setText(R.string.app_name); //利用資源的id傳入一個(gè)字符串
        System.out.println(getResources().getText(R.string.app_name));  // 當(dāng)前的avtivity是一個(gè)Context,所以直接通過getR獲取資源
        setContentView(tv);
    }
}

除了可以獲取字符串資源外谴轮,它還可以獲取只要工程文件里邊存在任意類型的資源炒瘟。比如說圖片資源:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ImageView iv = new ImageView(this);
        iv.setImageResource(R.mipmap.ic_launcher);
        setContentView(iv);
    }
}

這樣運(yùn)行就會(huì)看到安卓機(jī)器人的圖片了
Context作用:訪問全局信息的接口,比如全局的字符串第步,圖片資源等疮装。

2. Application用途

多個(gè)組件之間數(shù)據(jù)共享,前面了解了Context可以作為全局信息的橋梁粘都。
新建一個(gè)類App廓推,讓它繼承至Application,配置AndroidMainfset:

<application
    android:name=".App"  //new add

通過這種方式翩隧,我們就自定義了 Android 的 Application 樊展。而 Application 才是一個(gè)真正的全局上下文對(duì)象。

App.java
public class App extends Application {
    private String textData = "default";
    public void setTextData(String textData) {
        this.textData = textData;
    }
    public String getTextData() {
        return textData;
    }
}

然后新建一個(gè)類 Main2 繼承至 Activity堆生,重寫 onCreate()专缠。添加注冊(cè)信息:

把這個(gè)Activity也設(shè)置為啟動(dòng)的。
<activity 
    android:name=".Main2"
    android:label="Main2">  //同時(shí)將第一個(gè)Aty的label設(shè)為Main1淑仆。
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

運(yùn)行發(fā)現(xiàn)手機(jī)已經(jīng)裝了Main1和Main2,打開Main1為圖片涝婉,打開Main2為空白。
接下來在layout文件夾中創(chuàng)建 main1.xml 和 main2.xml ,并綁定視圖糯景。

MainActivity.java
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main1);
    }
}
Main2.java
public class Main2 extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
    }
}

回到 main1.xml嘁圈,拖進(jìn)一個(gè) PlainTextView省骂,PlainText 和 Button:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Text"
    android:id="@+id/textView" />
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editText"
    android:layout_gravity="center_horizontal" />
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="保存"
    android:id="@+id/btnSaveData" />

拷貝一份到main2.xml使用相同布局,去到MainActivity.java

public class MainActivity extends AppCompatActivity {
    private TextView textView;
    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main1);
        textView = (TextView) findViewById(R.id.textView); //獲取資源
        editText = (EditText) findViewById(R.id.editText);
        textView.setText("共享的數(shù)據(jù)是:"+getApp().getTextData());
        findViewById(R.id.btnSaveData).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ((App)getApplicationContext()).setTextData(editText.getText().toString()); //保存時(shí)獲取Application,類型為自定義的App蟀淮,獲取信息保存到全局的Context里邊
                textView.setText("共享的數(shù)據(jù)是:"+getApp().getTextData());
            }
        });
    }
    public App getApp(){
        return (App) getApplicationContext();
    }
}

同樣的代碼添加一份到 Main2.java 。
運(yùn)行可以看到共享數(shù)據(jù)是 default钞澳,輸入 wshlin 怠惶,點(diǎn)保存,可以看到共享數(shù)據(jù)變?yōu)?wshlin 轧粟。退出打開Main2策治,看到共享的數(shù)據(jù)為 wshlin脓魏,修改為kkk,退出打開Main通惫,發(fā)現(xiàn)共享數(shù)據(jù)為 kkk茂翔。
也就是說,在多個(gè) activity 里邊履腋,我們可以使用 Application 來進(jìn)行數(shù)據(jù)的共享珊燎。因?yàn)?Application 對(duì)于同一個(gè)應(yīng)用來說是唯一的。

3. Application的生命周期

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末遵湖,一起剝皮案震驚了整個(gè)濱河市悔政,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌延旧,老刑警劉巖谋国,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異迁沫,居然都是意外死亡芦瘾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門集畅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旅急,“玉大人,你說我怎么就攤上這事牡整∶晁保” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵逃贝,是天一觀的道長(zhǎng)谣辞。 經(jīng)常有香客問我,道長(zhǎng)沐扳,這世上最難降的妖魔是什么泥从? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮沪摄,結(jié)果婚禮上躯嫉,老公的妹妹穿的比我還像新娘。我一直安慰自己杨拐,他們只是感情好祈餐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哄陶,像睡著了一般帆阳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屋吨,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天蜒谤,我揣著相機(jī)與錄音山宾,去河邊找鬼。 笑死鳍徽,一個(gè)胖子當(dāng)著我的面吹牛资锰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播阶祭,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼台妆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了胖翰?” 一聲冷哼從身側(cè)響起接剩,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎萨咳,沒想到半個(gè)月后懊缺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡培他,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年鹃两,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舀凛。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俊扳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猛遍,到底是詐尸還是另有隱情馋记,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布懊烤,位于F島的核電站梯醒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏腌紧。R本人自食惡果不足惜茸习,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望壁肋。 院中可真熱鬧号胚,春花似錦、人聲如沸浸遗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乙帮。三九已至杜漠,卻和暖如春极景,著一層夾襖步出監(jiān)牢的瞬間察净,已是汗流浹背驾茴。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氢卡,地道東北人锈至。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像译秦,于是被迫代替她去往敵國(guó)和親峡捡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,162評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理筑悴,服務(wù)發(fā)現(xiàn)们拙,斷路器,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)阁吝、插件砚婆、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,105評(píng)論 4 62
  • 前幾天整理了Java面試題集合,今天再來整理下Android相關(guān)的面試題集合.如果你希望能得到最新的消息,可以關(guān)注...
    Boyko閱讀 3,635評(píng)論 8 135
  • 夫尚賢者装盯,政之本也。 譯文: 尊重賢才甲馋,是為政埂奈、治國(guó)的根本。
    梨花穎玉閱讀 313評(píng)論 0 0