Android中Application類(lèi)用法

Application和Activity,Service一樣是Android框架的一個(gè)系統(tǒng)組件鲜滩,當(dāng)Android程序啟動(dòng)時(shí)系統(tǒng)會(huì)創(chuàng)建一個(gè)Application對(duì)象过椎,用來(lái)存儲(chǔ)系統(tǒng)的一些信息夺衍。
Android系統(tǒng)自動(dòng)會(huì)為每個(gè)程序運(yùn)行時(shí)創(chuàng)建一個(gè)Application類(lèi)的對(duì)象且只創(chuàng)建一個(gè)捐迫,所以Application可以說(shuō)是單(singleton)模式的一個(gè)類(lèi)。
通常我們是不需要指定一個(gè)Application的籽腕,系統(tǒng)會(huì)自動(dòng)幫我們創(chuàng)建嗡呼,如果需要?jiǎng)?chuàng)建自己Application,那也很簡(jiǎn)單皇耗!創(chuàng)建一個(gè)類(lèi)繼承Application并在AndroidManifest.xml文件中的application標(biāo)簽中進(jìn)行注冊(cè)(只需要給application標(biāo)簽增加name屬性南窗,并添加自己的 Application的名字即可)。
啟動(dòng)Application時(shí)郎楼,系統(tǒng)會(huì)創(chuàng)建一個(gè)PID万伤,即進(jìn)程ID,所有的Activity都會(huì)在此進(jìn)程上運(yùn)行呜袁。那么我們?cè)贏pplication創(chuàng)建的時(shí)候初始化全局變量壕翩,同一個(gè)應(yīng)用的所有Activity都可以取到這些全局變量的值,換句話說(shuō)傅寡,我們?cè)谀骋粋€(gè)Activity中改變了這些全局變量的值,那么在同一個(gè)應(yīng)用的其他Activity中值就會(huì)改變北救。
Application對(duì)象的生命周期是整個(gè)程序中最長(zhǎng)的荐操,它的生命周期就等于這個(gè)程序的生命周期。因?yàn)樗侨值膯卫恼洳撸栽诓煌腁ctivity,Service中獲得的對(duì)象都是同一個(gè)對(duì)象托启。所以可以通過(guò)Application來(lái)進(jìn)行一些,如:數(shù)據(jù)傳遞攘宙、數(shù)據(jù)共享和數(shù)據(jù)緩存等操作屯耸。
應(yīng)用場(chǎng)景:
在Android中,可以通過(guò)繼承Application類(lèi)來(lái)實(shí)現(xiàn)應(yīng)用程序級(jí)的全局變量蹭劈,這種全局變量方法相對(duì)靜態(tài)類(lèi)更有保障疗绣,直到應(yīng)用的所有Activity全部被destory掉之后才會(huì)被釋放掉。
實(shí)現(xiàn)步驟:
1铺韧、在ApplicationManifest.xml文件中配置自定義的Application
<pre><?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.test"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="8" />
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:name=".CustomApplication">

<activity
android:name=".FirstActivity"
android:label="@string/app_name">
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SecondActivity"
android:label="@string/app_name">
</activity>
</application>
</manifest></pre>
2多矮、CustomApplication.java示例代碼
<pre>** //繼承Application * *
public class CustomApplication extends Application {
private static final String VALUE = "Harvey";
private String value;
@Override
public void onCreate() {
super.onCreate();
setValue(VALUE); // 初始化全局變量
}
public void setValue(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}</pre>

注:繼承Application類(lèi),主要重寫(xiě)里面的onCreate()方法(android.app.Application包的onCreate()才是真正的Android程序的入口點(diǎn)),就是創(chuàng)建的時(shí)候塔逃,初始化變量的值讯壶。然后在整個(gè)應(yīng)用中的各個(gè)文件中就可以對(duì)該變量進(jìn)行操作了。
FirstActivity.java示例代碼
<pre>public class FirstActivity extends Activity {
private CustomApplication app;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
app = (CustomApplication) getApplication(); // 獲得CustomApplication對(duì)象
Log.i("FirstActivity", "初始值=====" + app.getValue()); // 獲取進(jìn)程中的全局變量值湾盗,看是否是初始化值
app.setValue("Harvey Ren"); // 重新設(shè)置值
Log.i("FirstActivity", "修改后=====" + app.getValue()); // 再次獲取進(jìn)程中的全局變量值伏蚊,看是否被修改
Intent intent = new Intent(); intent.setClass(this, SecondActivity.class);
startActivity(intent);
}
}</pre>
注:只需要調(diào)用Context的getApplicationContext或者Activity的getApplication方法來(lái)獲得一個(gè)Application對(duì)象,然后再得到相應(yīng)的成員變量即可格粪。它是代表我們的應(yīng)用程序的類(lèi)躏吊,使用它可以獲得當(dāng)前應(yīng)用的主題和資源文件中的內(nèi)容等,這個(gè)類(lèi)更靈活的一個(gè)特性就是可以被我們繼承匀借,來(lái)添加我們自己的全局屬性颜阐。
SecondActivity.java示例代碼
<pre>public class SecondActivity extends Activity {
private CustomApplication app;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
app = (CustomApplication) getApplication(); // 獲取應(yīng)用程序
Log.i("SecondActivity", "當(dāng)前值=====" + app.getValue()); // 獲取全局值
}
}</pre>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吓肋,隨后出現(xiàn)的幾起案子凳怨,更是在濱河造成了極大的恐慌,老刑警劉巖是鬼,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肤舞,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡均蜜,警方通過(guò)查閱死者的電腦和手機(jī)李剖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)囤耳,“玉大人篙顺,你說(shuō)我怎么就攤上這事〕湓瘢” “怎么了德玫?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)椎麦。 經(jīng)常有香客問(wèn)我宰僧,道長(zhǎng),這世上最難降的妖魔是什么观挎? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任琴儿,我火速辦了婚禮,結(jié)果婚禮上嘁捷,老公的妹妹穿的比我還像新娘造成。我一直安慰自己,他們只是感情好普气,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布谜疤。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪夷磕。 梳的紋絲不亂的頭發(fā)上履肃,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音坐桩,去河邊找鬼尺棋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛绵跷,可吹牛的內(nèi)容都是我干的膘螟。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼碾局,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼荆残!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起净当,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤内斯,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后像啼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體俘闯,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年忽冻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了真朗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡僧诚,死狀恐怖遮婶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情湖笨,我是刑警寧澤蹭睡,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站赶么,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏脊串。R本人自食惡果不足惜辫呻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望琼锋。 院中可真熱鬧放闺,春花似錦、人聲如沸缕坎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至匾寝,卻和暖如春搬葬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背艳悔。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工急凰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人猜年。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓抡锈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親乔外。 傳聞我的和親對(duì)象是個(gè)殘疾皇子床三,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,790評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)杨幼,斷路器撇簿,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • Application 標(biāo)簽 android:allowTaskReparenting android:allow...
    Shawn_Dut閱讀 7,773評(píng)論 2 61
  • 每一天 都會(huì)思念 一個(gè)人 一段親情 繽紛如雪的故事 心疼 又心暖 每一天 都會(huì) 愛(ài)我所愛(ài) 翻閱發(fā)黃的記憶 那特有的...
    王錦思閱讀 82評(píng)論 0 0
  • 近日,80后素寶寶小L老師(張潤(rùn)郎)登錄《i時(shí)尚》人物專(zhuān)訪推汽。 《i時(shí)尚》是全球頂級(jí)時(shí)尚雜志补疑,雜志以大牌明星、潮流熱...
    Vshine閱讀 331評(píng)論 0 0