Android開發(fā):Activity生命周期&詳解

  • 2016年12月8日晦譬,Google中國開發(fā)者大會在京舉行疤苹,同時正式上線了Google中國開發(fā)者網(wǎng)站Google Developers,查看官方學(xué)習資源再也不用爬梯子了
  1. 簡介
  2. 使用流程
  3. 跳轉(zhuǎn)方式
  4. 生命周期

Activity的簡介

Activity是Android四大組件之一敛腌,它用于展示界面卧土。Activity是一個應(yīng)用程序組件,提供一個屏幕像樊,用戶可以用來交互為了完成某項任務(wù)尤莺。Activity中所有操作都與用戶密切相關(guān),是一個負責與用戶交互的組件生棍,可以通過setContentView(View)來顯示指定控件颤霎。

在一個android應(yīng)用中,一個Activity通常就是一個單獨的屏幕涂滴,它上面可以顯示一些控件也可以監(jiān)聽并處理用戶的事件做出響應(yīng)友酱。Activity之間通過Intent進行通信。

使用流程

  1. 定義類繼承Activity
  2. 在AndroidManifest.xml的<application>節(jié)點中聲明<activity>
     <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  1. Intent-filter子節(jié)點:
    添加意圖過濾柔纵,可以通過隱式意圖啟動缔杉。可以在桌面生成快捷方式搁料,應(yīng)用程序的入口或详。

跳轉(zhuǎn)方式

  1. 顯式跳轉(zhuǎn):在可以引用到那個類, 并且可以引用到那個類的字節(jié)碼時可以使用,一般用于自己程序的內(nèi)部郭计,顯式跳轉(zhuǎn)不可以跳轉(zhuǎn)到其他程序的頁面中霸琴。
  2. 隱式跳轉(zhuǎn):可以在當前程序跳轉(zhuǎn)到另一個程序的頁面,隱式跳轉(zhuǎn)不需要引用到那個類,但是必須得知道那個界面的action和category昭伸。
  3. Activity之間通過Intent進行通信梧乘。Intent,用于描述一個頁面的信息,同時也是一個數(shù)據(jù)的載體勋乾。
  4. 你可以用startActivity(),或startActivityForResult()(如果你想要Activity返回數(shù)據(jù))傳遞一個Intent來開啟一個Activity(或者讓它做一些其他東西)宋下。
  5. Intent除了可以激活組件,還可以通過封裝的Bundle對象來攜帶數(shù)據(jù)辑莫。所以在啟動一個Activity的時候,同時還可以傳遞數(shù)據(jù)罩引,然后在新的Activity中可以獲得意圖對象以獲取其中Bundle保存的數(shù)據(jù)各吨。
  6. Intent可傳遞的數(shù)據(jù)類型有: 八大基本數(shù)據(jù)類型,String,數(shù)組,ArrayList<String>, Bundle數(shù)據(jù)捆, 實現(xiàn)序列化接口的 Javabean。

隱式跳轉(zhuǎn)打開瀏覽器界面:1. 配置文件 2.程序代碼

<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="http" />
            <data android:scheme="https" />
            <data android:scheme="about" />
            <data android:scheme="javascript" />
</intent-filter>

    //跳轉(zhuǎn)到瀏覽器界面代碼
    public void skip2Browser(View view){
        //創(chuàng)建一個Intent對象
        Intent intent = new Intent();
        //設(shè)置Action
        intent.setAction("android.intent.action.VIEW");
        //設(shè)置category
        intent.addCategory("android.intent.category.BROWSABLE");
        //設(shè)置參數(shù)
        intent.setData(Uri.parse("http://www.baidu.com"));
        //啟動Activity
        startActivity(intent);
    }

生命周期

Activity有三種狀態(tài):

  1. 當它在屏幕前臺時,響應(yīng)用戶操作的Activity, 它是激活或運行狀態(tài)揭蜒。
  2. 當它上面有另外一個Activity横浑,使它失去了焦點但仍然對用戶可見時, 它處于暫停狀態(tài)
  3. 當它完全被另一個Activity覆蓋時則處于停止狀態(tài)屉更。
  4. 當Activity從一種狀態(tài)轉(zhuǎn)變到另一種狀態(tài)時徙融,會調(diào)用其生命周期方法。


    Activity lifecycle
  • startActivity開啟一個Activity時, 生命周期的過程是: onCreate ---onStart(可見不可交互) ---onResume(可見可交互)瑰谜。
  • 點擊back鍵關(guān)閉一個Activity時, 生命周期的過程是: onPause(部分可見不可交互) ---onStop(完全不可見) ---onDestroy(銷毀)欺冀。
  • 當開啟一個新的Activity(以對話框形式),新的activity把后面的activity給蓋住一部分時萨脑,后面的activity的生命周期執(zhí)行的方法是:onPause(部分可見, 不可交互)隐轩。
    注意:指定Activity以對話框的形式顯示, 需在activity節(jié)點追加以下主題android:theme="@android:style/Theme.Dialog"。
  • 當把新開啟的Activity(以對話框形式)給關(guān)閉時, 后面的activity的生命周期執(zhí)行的方法是: onResume(可見渤早,可交互)职车。
  • 當開啟一個新的activity把后面的activity完全蓋住時, 生命周期的方法執(zhí)行順序是: onPause ---onStop(完全不可見)。
  • 當把新開啟的activity(完全蓋住)給關(guān)閉時, 生命周期的方法執(zhí)行順序是: onRestart---onStart ---onResume(可見, 可交互)鹊杖。
  • 實際應(yīng)用場景:onResume 可見, 可交互悴灵,在該方法中可進行刷新數(shù)據(jù)操作;onPause 可見骂蓖,但是不能響應(yīng)用戶操作称勋,在該方法中可進行操作暫停;onCreate 初始化布局以及一些大量的數(shù)據(jù)涯竟;onDestroy 把數(shù)據(jù)給釋放掉, 節(jié)省內(nèi)存赡鲜。

保存Activity信息

  • onSaveInstanceState:在Activity被動的摧毀或停止的時候調(diào)用,用于保存運行數(shù)據(jù)庐船,可以將數(shù)據(jù)存在在Bundle中银酬。onPause之后執(zhí)行。被動消耗筐钟,指被系統(tǒng)回收揩瞪,不是主動調(diào)用finish方法。
  • onRestoreInstanceState:該方法在Activity被重新繪制的時候調(diào)用篓冲,例如改變屏幕方向李破,savedInstanceState為onSaveInstanceState保存的數(shù)據(jù)。
  • Activity重新創(chuàng)建壹将,恢復(fù)數(shù)據(jù)嗤攻,onStart之后執(zhí)行。如果activity停止之后诽俯,進程在后頭很容易被殺死妇菱,然后重新啟動,就會執(zhí)行恢復(fù)數(shù)據(jù)方法。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闯团,一起剝皮案震驚了整個濱河市辛臊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌房交,老刑警劉巖彻舰,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異候味,居然都是意外死亡刃唤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門负溪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來透揣,“玉大人,你說我怎么就攤上這事川抡》妫” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵崖堤,是天一觀的道長侍咱。 經(jīng)常有香客問我,道長密幔,這世上最難降的妖魔是什么楔脯? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮胯甩,結(jié)果婚禮上昧廷,老公的妹妹穿的比我還像新娘。我一直安慰自己偎箫,他們只是感情好木柬,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著淹办,像睡著了一般眉枕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怜森,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天速挑,我揣著相機與錄音,去河邊找鬼副硅。 笑死姥宝,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的想许。 我是一名探鬼主播伶授,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼断序,長吁一口氣:“原來是場噩夢啊……” “哼流纹!你這毒婦竟也來了糜烹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤漱凝,失蹤者是張志新(化名)和其女友劉穎疮蹦,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茸炒,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡愕乎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了壁公。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片感论。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖紊册,靈堂內(nèi)的尸體忽然破棺而出比肄,到底是詐尸還是另有隱情,我是刑警寧澤囊陡,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布芳绩,位于F島的核電站,受9級特大地震影響撞反,放射性物質(zhì)發(fā)生泄漏妥色。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一遏片、第九天 我趴在偏房一處隱蔽的房頂上張望嘹害。 院中可真熱鬧,春花似錦吮便、人聲如沸笔呀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凿可。三九已至,卻和暖如春授账,著一層夾襖步出監(jiān)牢的瞬間枯跑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工白热, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留敛助,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓屋确,卻偏偏與公主長得像纳击,于是被迫代替她去往敵國和親续扔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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