2016年最新android面試題
1.如何避免ANR?
答:ANR:Application Not Responding,五秒在Android中,活動管理器和窗口管理器這兩個系統服務負責監視應用程序的響應。當出現下列情況時,Android就會顯示ANR對話框了: 對輸入事件(如按鍵、觸摸屏事件)的響應超過5秒 意向接受器(intentReceiver)超過10秒鐘仍未執行完畢
Android應用程序完全運行在一個獨立的線程中(例如main)。這就意味著,任何在主線程中運行的,需要消耗大量時間的操作都會引發ANR。因為此時,你的應用程序已經沒有機會去響應輸入事件和意向廣播(Intent broadcast)。 因此,任何運行在主線程中的方法,都要盡可能的只做少量的工作。特別是活動生命周期中的重要方法如onCreate()和 onResume()等更應如此。潛在的比較耗時的操作,如訪問網絡和數據庫;或者是開銷很大的計算,比如改變位圖的大小,需要在一個單獨的子線程中完成(或者是使用異步請求,如數據庫操作)。但這并不意味著你的主線程需要進入阻塞狀態已等待子線程結束 -- 也不需要調用Therad.wait()或者Thread.sleep()方法。取而代之的是,主線程為子線程提供一個句柄(Handler),讓子線程在即將結束的時候調用它(xing:可以參看Snake的例子,這種方法與以前我們所接觸的有所不同)。使用這種方法涉及你的應用程序,能夠保證你的程序對輸入保持良好的響應,從而避免因為輸入事件超過5秒鐘不被處理而產生的ANR。這種實踐需要應用到所有顯示用戶界面的線程,因為他們都面臨著同樣的超時問題。
2. handler機制的原理
答 :andriod提供了 Handler 和 Looper 來滿足線程間的通信。Handler 先進先出原則。Looper類用來管理特定線程內對象之間的消息交換(Message Exchange)! 1)Looper: 一個線程可以產生一個Looper對象,由它來管理此線程里的Message Queue(消息隊列)! 2)Handler: 你可以構造Handler對象來與Looper溝通,以便push新消息到Message Queue里;或者接收Looper從Message Queue取出)所送來的消息。 3) Message Queue(消息隊列):用來存放線程放入的消息! 4)線程:UI thread 通常就是main thread,而Android啟動程序時會替它建立一個Message Queue。
3. Android引入廣播機制的用意?
答:a:從MVC的角度考慮(應用程序內) 其實回答這個問題的時候還可以這樣問,android為什么要有那4大組件,現在的移動開發模型基本上也是照搬的web那一套MVC架構,只不過是改了點嫁妝而已。android的四大組件本質上就是為了實現移動或者說嵌入式設備上的MVC架構,它們之間有時候是一種相互依存的關系,有時候又是一種補充關系,引入廣播機制可以方便幾大組件的信息和數據交互。 b:程序間互通消息(例如在自己的應用程序內監聽系統來電) c:效率上(參考UDP的廣播協議在局域網的方便性) d:設計模式上(反轉控制的一種應用,類似監聽者模式)
4.什么情況會導致Force Close ?如何避免?能否捕獲導致其的異常?
答:一般像空指針啊,可以看起logcat,然后對應到程序中 來解決錯誤。
5.如何將一個Activity設置成窗口的樣式。
講點輕松的吧,可能有人希望做出來的應用程序是一個漂浮在手機主界面的東西,那么很 簡單你只需要設置 一下Activity的主題就可以了在AndroidManifest.xml 中定義 Activity的 地方一句話: Xml代碼 1. android :theme="@android:style/Theme.Dialog" 3. android:theme="@android:style/Theme.Dialog" android :theme="@android:style/Theme.Dialog" android:theme="@android:style/Theme.Dialog" 這就使你的應用程序變成對話框的形式彈出來了,或者 Xml代碼 1. android:theme="@android:style/Theme.Translucent" 3. android:theme="@android:style/Theme.Translucent" 就變成半透明的,[友情提示-.-]類似的這種activity的屬性可以在android.R.styleable 類的AndroidManifestActivity 方法中看到,AndroidManifest.xml中所有元素的屬性的介紹都可以參考這個類android.R.styleable 上面說的.是屬性名稱,具體有什么值是在android.R.style中 可以看到,比如這個"@android:style/Theme.Dialog" 就對應于android.R.style.Theme_Dialog ,('_'換成'.' < --注意:這個是文章內容不是笑臉)就可以用在描述文件 中了,找找類定義和描述文件中的對應關系就都明白了。
(簡單來說直接在配置文件引入風格。追求效果的應用此用法用到挺多);
6、IntentService有何優點?
Acitivity的進程,當處理Intent的時候,會產生一個對應的Service Android的進程處理器現在會盡可能的不kill掉你 非常容易使用
(這回答其實比較。。。其實我也不知道干嘛使,因為看幫助文檔就說了一個用來處理異步請求的service,工作完了自己停止。沒用過,不做評價)。
7、 廣播的生命周期?
廣播的生命周期非常端,當發送之后intent會到AndroidManifest.xml方法中找是不是匹配的action,如果有就調用Receiver,然后獲得Receiver對象,再執行onReceiver方法,這時候Receiver對象就沒有用了,當我們再次點擊按鈕的時候就會重新獲得對象,這就是BroadcastReceiver的生命周期。
在BroadcastReceiver里不能做一些比較耗時的操作,否則會彈出ANR(Application No Response)的對話框。
如果需要完成一項耗時的工作,應該通過發送Intent給Service,由Service來完成。這里不能使用子線程來解決,因為BroadcastReceiver的生命周期很短,子線程可能還沒有結束,BroadcastReceiver就先結束了。BroadcastReceiver一旦結束,此時BroadcastReceiver的所在線程很容易在系統需要內存時被優先殺死,因為它屬于空進程(沒有任何活動組件的進程)。如果它的宿主進程被殺死,那么正在工作的子線程也會被殺死,所以采用子線程來解決是不可靠的。
8、啟動service的兩種方法?有什么區別?
一種是startService(),另一種是bindService()。這兩者的區別是第一種方式調用者開啟了服務,即會與服務失去聯系,兩者沒有關聯。即使訪問者退出了,服務仍在運行。如需解除服務必須顯式的調用stopService方法。主要用于調用者與服務沒有交互的情況下,也就是調用者不需要獲取服務里的業務方法。比如電話錄音。而后者調用者與服務綁定在一起的。當調用者退出的時候,服務也隨之退出。用于需要與服務交互。
【2016年最新android面試題】相關文章:
最新android面試題及答案11-07
android面試題及答案精選11-12
最新競爭上崗面試題10-01
最新JAVA實現鏈表面試題10-24
最新關于精選php面試題及答案08-07
最新特崗教師面試題及答案參考05-28
最新事業單位面試題及答案05-12
最新招聘社區工作者面試題及答案02-26
德爾福面試題01-11
移動面試題04-01