Android面試一天一題(4 Day)

我一般面試技術分兩方面了解面試者凡辱,一是測重問面試者細節(jié)的地方鞍帝,看對方是否真如簡歷上所說對XX“精通”、“熟悉”煞茫、“有一定的見解”帕涌,有實踐經(jīng)驗的積累。別一種是側重考察對方對問題(可以是未知問題)的理解和解決問題的思路续徽。

面試題: 如何判斷Activity是否在運行蚓曼?

如下這場景我相信很多人都遇到過,這段話也是從某個帖子截取出來的:

從Activity A 啟動一個線程去進行網(wǎng)絡上傳操作钦扭,在A中設立一個回調(diào)函數(shù)纫版,當上傳操作完成以后,在A的這個回調(diào)函數(shù)中會彈出一個對話框客情,用來顯示回調(diào)信息其弊●海可是當上傳的過程還在進行的時候,我按下back鍵梭伐,A的activity 被銷毀了痹雅,可是那個上傳的線程還在進行,當那個線程結束后糊识,本來應該在A中彈出一個對話框绩社,可是由于A已經(jīng)不存在了,系統(tǒng)就會報錯提示赂苗,“將對話框顯示在不存在的頁面上”愉耙,然后程序就掛掉了。

我看到過很多人用Handler來充當上面所提到的“回調(diào)函數(shù)”拌滋,即工作線程完成工作后朴沿,通過主線程的Handler處理UI更新,如彈出提示Dialog败砂∶跸桑可能有些人沒有弄明白,Activity都被系統(tǒng)銷毀了吠卷,工作線程怎么還能調(diào)它的變量呢锡垄?其實所謂的Activity銷毀只是不再受系統(tǒng)的AMS控制,但Activity這個對象的實例還是存在于內(nèi)存中的祭隔,具體什么時候真正把這個對象實例也銷毀(回收)了货岭,就要看內(nèi)存回收機制了,哪怕是這個實例沒有可達的引用了也不一定會馬上回收疾渴。

針對這種用Handler更新UI的情況千贯,我們需要在操作UI前判斷一下此Activity是否已被銷毀。很多人可能都用過isFinishing來判斷搞坝,用多了就會發(fā)現(xiàn)好象不太準搔谴,為什么呢,看一下它的源代碼:

    /**
     * Check to see whether this activity is in the process of finishing,
     * either because you called {@link #finish} on it or someone else
     * has requested that it finished.  This is often used in
     * {@link #onPause} to determine whether the activity is simply pausing or
     * completely finishing.
     *
     * @return If the activity is finishing, returns true; else returns false.
     *
     * @see #finish
     */
    public boolean isFinishing() {
        return mFinished;
    }

    /**
     * Returns true if the final {@link #onDestroy()} call has been made
     * on the Activity, so this instance is now dead.
     */
    public boolean isDestroyed() {
        return mDestroyed;
    }

而mFinished是在finish()中被賦值的桩撮,也就是說只有通過調(diào)用finish()結束的Activity敦第,mFinished的值才會被置為true。所以有時候Activity的生命周期沒有按我們預想的來走時(如內(nèi)存緊張時)店量,會出現(xiàn)判斷出錯的情況芜果。

Android源碼可以使用這個網(wǎng)站查詢:androidxref

看看Google工程師是怎么判斷的(來源于Android源碼中的Call應用,AsyncTask中的onPostExecute片段):

    @Override
    protected void onPostExecute(Void result) {
        final Activity activity = progressDialog.getOwnerActivity();

        if (activity == null || activity.isDestroyed() || activity.isFinishing()) {
            return;
        }

        if (progressDialog != null && progressDialog.isShowing()) {
            progressDialog.dismiss();
        }
    }

多了一個isDestroyed()的判斷融师。

小結

如果對方?jīng)]聽說過isFinishing函數(shù)右钾,那可以讓他從自己的角度看如何解決這個問題,正好可以看看他的邏輯思維是否清晰合理。工作中往往會遇到舀射,一些求職者由于之前是做其他方面剛轉Android開發(fā)窘茁,對Android的了解還不夠,但有很強理解和學習能力脆烟,通過引導發(fā)現(xiàn)他可以快速的得到合理的解決方案的話山林,我一般都很樂意要這樣的人。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浩淘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吴攒,更是在濱河造成了極大的恐慌张抄,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洼怔,死亡現(xiàn)場離奇詭異署惯,居然都是意外死亡,警方通過查閱死者的電腦和手機镣隶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門极谊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人安岂,你說我怎么就攤上這事轻猖。” “怎么了域那?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵咙边,是天一觀的道長。 經(jīng)常有香客問我次员,道長败许,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任淑蔚,我火速辦了婚禮市殷,結果婚禮上,老公的妹妹穿的比我還像新娘刹衫。我一直安慰自己醋寝,他們只是感情好,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布带迟。 她就那樣靜靜地躺著甥桂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪邮旷。 梳的紋絲不亂的頭發(fā)上黄选,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音,去河邊找鬼办陷。 笑死貌夕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的民镜。 我是一名探鬼主播啡专,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了韧拒?” 一聲冷哼從身側響起拍鲤,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎慧库,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體馋嗜,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡齐板,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了葛菇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甘磨。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖眯停,靈堂內(nèi)的尸體忽然破棺而出济舆,到底是詐尸還是另有隱情,我是刑警寧澤莺债,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布吗冤,位于F島的核電站,受9級特大地震影響九府,放射性物質(zhì)發(fā)生泄漏椎瘟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一侄旬、第九天 我趴在偏房一處隱蔽的房頂上張望肺蔚。 院中可真熱鬧,春花似錦儡羔、人聲如沸宣羊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仇冯。三九已至,卻和暖如春族操,著一層夾襖步出監(jiān)牢的瞬間苛坚,已是汗流浹背比被。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泼舱,地道東北人等缀。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像娇昙,于是被迫代替她去往敵國和親尺迂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,771評論 25 707
  • Java中的String類可以被繼承么冒掌? 答:不能噪裕,因為它是一個final類,同樣的還有Integer股毫,F(xiàn)loat...
    gyymz1993閱讀 3,970評論 2 104
  • 這部電影皇拣,如雷貫耳严蓖,剛上大學的時候就下載在硬盤里了薄嫡,可是兜兜轉轉氧急,竟至今日才從頭到尾看完。有些書毫深,雖然經(jīng)典吩坝,不到合...
    在讀書的月牙閱讀 555評論 0 1
  • 雨 下 了 一 夜,第 二 天 清 晨哑蔫,空 氣 格 外 清 新钉寝,鄉(xiāng) 村 坑 坑 洼 洼 的道路 上 散 發(fā)著 ...
    大王BA閱讀 693評論 0 1
  • 今日大盤低開后震蕩走高,最高上摸3395.75點闸迷,收盤上漲4.42點嵌纲,創(chuàng)業(yè)板指大漲1.37%點。盤面上腥沽,環(huán)...
    春風得意8u8e68閱讀 172評論 0 0