Android面試題(一)——Activity的生命周期和啟動(dòng)模式

引言


  • 這份面試題系列文章旨在查漏補(bǔ)缺,通過(guò)常見(jiàn)的面試題發(fā)現(xiàn)自己在Android基礎(chǔ)知識(shí)上的遺漏和欠缺贷洲,驗(yàn)證所學(xué)是否扎實(shí)。
  • 這是系列的第一章晋柱,后面我會(huì)根據(jù)安卓知識(shí)模塊分類并網(wǎng)羅分析各種常見(jiàn)面試題优构。

面試題:


  1. Activity的生命周期

答:onCreate->onStart->onResume->Activity運(yùn)行->新的Activity運(yùn)行->onPause->onStop->onDestroy->Activity銷毀


Activity生命周期的切換過(guò)程.png
  • Activity的啟動(dòng)方式

答:四種啟動(dòng)模式,standard, singleTask, singleTop, singleInstance雁竞。

  • standard:標(biāo)準(zhǔn)模式钦椭,在當(dāng)前的任務(wù)棧上創(chuàng)建新的Activity,不論之前有沒(méi)有創(chuàng)建過(guò)該Activity碑诉。注意:ApplicationContext無(wú)法啟動(dòng)standard模式的Activity彪腔。

  • singleTask:棧內(nèi)復(fù)用模式,分兩種情況进栽,第一種情況:如果有任務(wù)棧里已經(jīng)創(chuàng)建了該Acitiviy德挣,直接銷毀該Acitivity棧上面的所有Acitivity,無(wú)須新創(chuàng)建一個(gè)Activity快毛;第二種情況:如果沒(méi)有任務(wù)棧里已經(jīng)創(chuàng)建該Activity格嗅,創(chuàng)建一個(gè)新的任務(wù)棧并在新棧上創(chuàng)建新Activity。注意:該模式下復(fù)用Activity唠帝,系統(tǒng)會(huì)調(diào)用Activity的onNewIntent方法屯掖。

  • singleTop:棧頂復(fù)用模式,如果該Activity在任務(wù)棧棧頂襟衰,即當(dāng)前活動(dòng)的Acitivty就是要?jiǎng)?chuàng)建的Activity贴铜,那么不會(huì)創(chuàng)建新的Activity。注意:該模式下復(fù)用Activity,系統(tǒng)會(huì)調(diào)用Activity的onNewIntent方法绍坝。

  • singleInstance:?jiǎn)螌?shí)例模式徘意,加強(qiáng)版的singleTask,當(dāng)每次都直接創(chuàng)建一個(gè)新的任務(wù)棧陷嘴,再在該新棧上創(chuàng)建新Activity映砖。注意:singleInstance永遠(yuǎn)是單棧單Activity

  • onSaveInstanceState和onRestoreInstanceState調(diào)用的過(guò)程和時(shí)機(jī)

    • 調(diào)用時(shí)機(jī):Activity的異常情況下(例如轉(zhuǎn)動(dòng)屏幕或者被系統(tǒng)回收)的情況下,會(huì)調(diào)用到onSaveInstanceState和onRestoreInstanceState灾挨。其他情況不會(huì)觸發(fā)這個(gè)過(guò)程邑退。但是按Home鍵或者啟動(dòng)新Activity仍然會(huì)單獨(dú)觸發(fā)onSaveInstanceState的調(diào)用。
    • 調(diào)用過(guò)程:舊的Activity要被銷毀時(shí)劳澄,由于是異常情況下的地技,所以除了正常調(diào)用onPause, onStop, onDestroy方法外,還會(huì)在調(diào)用onStop方法前秒拔,調(diào)用onSaveInstanceState方法莫矗。新的Activity重建時(shí),我們就可以通過(guò)onRestoreInstanceState方法取出之前保存的數(shù)據(jù)并恢復(fù)砂缩,onRestoreInstanceState的調(diào)用時(shí)機(jī)在onCreate之后浑玛。
      Activity的異常情況下的生命周期.png
  • Activity A調(diào)用Activity B時(shí),A調(diào)用什么函數(shù)犹菇?

    • 舊的Activity的onPause方法執(zhí)行結(jié)束涯曲,才執(zhí)行新的Activity的onCreat, onState和onResume方法。
    • onPause方法中不能有重量級(jí)的任務(wù)双吆,不然會(huì)影響新Activity的創(chuàng)建眨唬。
  • onNewIntent的作用和調(diào)用時(shí)機(jī)?

    • 調(diào)用時(shí)機(jī):如果Activity的啟動(dòng)模式是:singleTop, singleTask, singleInstance好乐,在復(fù)用這些Acitivity時(shí)就會(huì)在調(diào)用onStart方法前調(diào)用onNewIntent方法
    • 作用:讓已經(jīng)創(chuàng)建的Activity處理新的Intent匾竿。
  • fragment的生命周期

Fragment的生命周期.png
  • fagement和Activity的通信

有四種方法

  • Fragment可以通過(guò)getActivity()訪問(wèn)Activity實(shí)力,并輕松地執(zhí)行在Activity布局中查找視圖等任務(wù)蔚万。
View listView = getActivity().findViewById(R.id.list);
  • Activity可以通過(guò)FragmentManager的findFragmentById()或findFragmentByTag()岭妖,獲取對(duì)Fragment的引用。
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
  • 創(chuàng)建對(duì)Activity的事件回調(diào)
    • 在fragment中定義一個(gè)回調(diào)接口反璃,并要求宿主Activity實(shí)現(xiàn)它区转。當(dāng)Activity通過(guò)該接口受到回調(diào)時(shí),可以根據(jù)需要與布局中的其他片段共享這些信息版扩。
    • 代碼示例:
    public static class FragmentA extends ListFragment {
        ...
        // Container Activity must implement this interface
        public interface OnArticleSelectedListener {
            public void onArticleSelected(Uri articleUri);
        }
        ...
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            try {
                mListener = (OnArticleSelectedListener) activity;
            } catch (ClassCastException e) {
                throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
            }
        }
        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
            // Append the clicked item's row ID with the content provider Uri
            Uri noteUri = ContentUris.withAppendedId(ArticleColumns.CONTENT_URI, id);
            // Send the event and Uri to the host activity
            mListener.onArticleSelected(noteUri);
        }
    }
  • 向操作欄添加項(xiàng)目
  • 通過(guò)Fragment.setArguments向Fragment傳遞參數(shù)
public void setArguments(Bundle args)
final pubilc Bundle getArguments()

知識(shí)點(diǎn)


  1. Activity典型情況下的生命周期分析
  • Activity異常情況下的生命周期分析
  • Activity的啟動(dòng)模式
  • Fragment的生命周期
  • Activity和Fragment的通信方法

參考資料:


fagement官方文檔
《Android開(kāi)發(fā)藝術(shù)探究》
個(gè)人博客(https://yoxin.github.io/)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末废离,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子礁芦,更是在濱河造成了極大的恐慌蜻韭,老刑警劉巖悼尾,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異肖方,居然都是意外死亡闺魏,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門俯画,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)析桥,“玉大人,你說(shuō)我怎么就攤上這事艰垂∨菡蹋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵猜憎,是天一觀的道長(zhǎng)娩怎。 經(jīng)常有香客問(wèn)我,道長(zhǎng)胰柑,這世上最難降的妖魔是什么截亦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮柬讨,結(jié)果婚禮上崩瓤,老公的妹妹穿的比我還像新娘。我一直安慰自己踩官,他們只是感情好谷遂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著卖鲤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畴嘶。 梳的紋絲不亂的頭發(fā)上蛋逾,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音窗悯,去河邊找鬼区匣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蒋院,可吹牛的內(nèi)容都是我干的亏钩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼欺旧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼姑丑!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起辞友,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤栅哀,失蹤者是張志新(化名)和其女友劉穎震肮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體留拾,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡戳晌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痴柔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沦偎。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖咳蔚,靈堂內(nèi)的尸體忽然破棺而出豪嚎,到底是詐尸還是另有隱情,我是刑警寧澤屹篓,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布疙渣,位于F島的核電站,受9級(jí)特大地震影響堆巧,放射性物質(zhì)發(fā)生泄漏妄荔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一谍肤、第九天 我趴在偏房一處隱蔽的房頂上張望啦租。 院中可真熱鬧,春花似錦荒揣、人聲如沸篷角。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恳蹲。三九已至,卻和暖如春俩滥,著一層夾襖步出監(jiān)牢的瞬間嘉蕾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工霜旧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留错忱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓挂据,卻偏偏與公主長(zhǎng)得像以清,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子崎逃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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