<em id="5zzd5"><form id="5zzd5"></form></em>

          <address id="5zzd5"></address>
          <address id="5zzd5"></address>

                      學IT,好工作,就讀北大青鳥

                      北大青鳥電話028-86763871
                      ×

                      當前位置: 首頁 > 青鳥知識 > Android

                      面試題:知道Service嗎,它有幾種啟動方式?

                      2017-08-21

                         這是我印象深刻的一道題,很明顯它是我的第一次,那時我去一家公司(暫時叫它T公司吧)面試外派到韓國三星的工作機會。T公司的面試官是一個叫Bely架構師,顯然那個時候Android開發是稀缺資源,知道Service那都不得了了,當然Bely也沒打算為難我(必竟也工作4年多了,人長得也不錯),我輕松對答:E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      Service是一個專門在后臺處理長時間任務的Android組件,它沒有UI。它有兩種啟動方式,startService和bindService。E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      你猜得沒錯,Bely緊接著問我:這兩種啟動方式的區別。E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      startService只是啟動Service,啟動它的組件(如Activity)和Service并沒有關聯,只有當Service調用stopSelf或者其他組件調用stopService服務才會終止。
                      bindService方法啟動Service,其他組件可以通過回調獲取Service的代理對象和Service交互,而這兩方也進行了綁定,當啟動方銷毀時,Service也會自動進行unBind操作,當發現所有綁定都進行了unBind時才會銷毀Service。E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      這應該是比較關鍵的區別了,在面試前我剛剛用Serivce做過一個音樂播放器。幾年后,我在深圳面試過很多人,他們中有60-70%的人沒有使用Service的經驗,讓我一度感覺得深圳這座城市做Android開發的比較浮躁。因為這兒工作機會太多了,初級的開發者都比較急功近利,不需要在自己身上下太多的功夫也可以找到工作(當然這是片面的認識)。E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      當然還有其他的區別,如兩種調用對Service生命周期函數影響,面試官也可以就這個問題展開一下。
                      E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站


                      E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      當我遇到面試者知道怎么使用Service,也如多年前的我可以自如的答出startService和bindService的區別時,我一般會多問一句:E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      Service的onCreate回調函數可以做耗時的操作嗎?E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      很多人都會說:可以。E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      原形畢露,他前面的回答只是在面試前預習了一下面試題而已。如果知道Service的onCreate是在主線程(ActivityThread)中調用的,耗時操作會阻塞UI,我一般再接著問:E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      如果需要做耗時的操作,你會怎么做?E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      問題便這樣展開了,一個人是否真正懂得原理會靈活運用,一下子便能看出來。 當面試者回答到線程和Handler方式時,我會再問一下對方:E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      是否知道IntentService,在什么場景下使用IntentService?E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      這也是面試官要看的點,真正的項目需要一個開發人員對某個問題有一定的深度,也需要對整個Android的知識點有一定的廣度。深度代表這個人對問題認真對待有鉆研的精神,廣度代表這個人在面對同一個問題時,會更容易從多種可行的方案中選出最合適的一種。E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      Service的實際項目中一直被很多人忽略,為什么我一再強調Service很重要,我們來看看,如果對Service完全無知會在工作中遇到什么問題。E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      場景:如果一個應用要從網絡上下載MP3文件,并在Activity上展示進度條,這個Activity要求是可以轉屏的。那么在轉屏時Actvitiy會重啟,如何保證下載的進度條能正確展示進度呢?E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      沒有Service概念的人,一般想出來的方案如下:E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      1. 在轉屏前將進度緩存,轉屏后再讀出來。E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      2. 使用android:configChanges設置,讓轉屏時Activity不銷毀和重建。E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      針對第1個方案,我會繼續問他將進度值存在哪里? 轉屏的過程中,我們知道Activity的重建算是比較耗時的,會可能會有幾百毫秒以上,那么這時候下載線程仍然在工作,進度肯定和保存時的進度不一致了,如何處理這個問題呢?E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      第2個方案,大家可以自己展開思考,實際的項目中可能會需要額外做一些事情來處理ContentView的橫豎布局的問題。E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      如果使用Service來解決這個問題,看似是比較完美的,不過就會涉及Activity(UI)和Service的交互問題,這個我們以后再討論。E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      小結

                      當我們知道了Service的用途,心中有一個Service相關的概念時,針對實際的場景還是要做具體的分析再決定是否使用Service。因為Service仍然是在主線程中調用,還是要開線程才能處理長時間的工作,Service和UI的交互也讓這個方式變得不那么簡便。如果你只需要在當前界面去做一些耗時操作,界面退出或改變時,工作也要停止,那么這時直接使用Thread(或者AsyncTask, ThreadHandler)會更合適你。E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站



                      E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站


                      E3E北大青鳥_北大青鳥計算機培訓學校_北大青鳥優越教育官方網站

                      • 成都總部地址:成都市武侯區天益街38理想中心3棟3樓
                        咨詢電話:028-86763871
                        面授課程:啟蒙星課程、軟件開發工程師課程、網絡工程師課程、Java全棧工程師課程、WEB全棧課程、.Net工程師課程、全棧軟件測試培訓、UI/UE設計師課程、大數據培訓、云計算課程
                      • 北京佳音旗艦校區地址:北京市西城區北禮士路100號
                        咨詢電話:400-601-0802
                        面授課程:啟蒙星課程、軟件開發工程師課程、網絡工程師課程、Java全棧工程師課程、WEB全棧課程、.Net工程師課程、全棧軟件測試培訓、UI/UE設計師課程、大數據培訓、云計算課程
                      • 貴陽優越校區地址:貴陽市高新區國家數字內容產業園
                        咨詢電話:400-680-0851
                        面授課程:啟蒙星課程、軟件開發工程師課程、網絡工程師課程、Java全棧工程師課程、WEB全棧課程、.Net工程師課程、全棧軟件測試培訓、UI/UE設計師課程、大數據培訓、云計算課程
                      • 沈陽三好校區地址:沈陽市和平區三好街54號
                        咨詢電話:400-855-1066
                        面授課程:啟蒙星課程、軟件開發工程師課程、網絡工程師課程、Java全棧工程師課程、WEB全棧課程、.Net工程師課程、全棧軟件測試培訓、UI/UE設計師課程、大數據培訓、云計算課程
                      • 蘭州優越校區地址:蘭州市安寧區興安路教育港
                        咨詢電話:0931-7701993
                        面授課程:啟蒙星課程、軟件開發工程師課程、網絡工程師課程、Java全棧工程師課程、WEB全棧課程、.Net工程師課程、全棧軟件測試培訓、UI/UE設計師課程、大數據培訓、云計算課程
                      • 上海人民廣場校區地址:上海市黃浦區云南北路59號六合大廈13樓(人民廣場地鐵口5號出,正北方向500米)
                        寶山校區地址:上海市寶山區紀蘊路588號5號樓B區2樓
                        咨詢電話:021-61113200
                        面授課程:啟蒙星課程、軟件開發工程師課程、網絡工程師課程、Java全棧工程師課程、WEB全棧課程、.Net工程師課程、全棧軟件測試培訓、UI/UE設計師課程、大數據培訓、云計算課程
                      <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>