在不少手機論壇都會有針對某一型號的子論壇,對一款手機的使用心得交流,并分享軟件資源。而對于Android平臺手機,由于廠商豐富,產品類型多樣,這樣使用同一款機型的用戶越來越少,缺少統一機型的程序強化。舉個稍顯不當的例子,現在山寨機泛濫,品種各異,就很少有專門針對某個型號山寨機的討論和群組,除了哪些功能異常搶眼、頗受追捧的機型以外。
五、過分依賴開發商缺少標準配置
在使用PC端的Windows Xp系統的時候,都會內置微軟Windows Media Player這樣一個瀏覽器程序,用戶可以選擇更多樣的播放器,如Realplay或暴風影音等。但入手開始使用默認的程序同樣可以應付多樣的需要。在Android平臺中,由于其開放性,軟件更多依賴第三方廠商,比如Android系統的SDK中就沒有內置音樂 播放器,全部依賴第三方開發,缺少了產品的統一性。
52. 什么是ANR 如何避免它?
答:ANR:Application NotResponding,五秒
在Android中,活動管理器和窗口管理器這兩個系統服務負責監視應用程序的響應。當出現下列情況時,Android就會顯示ANR對話框了:
對輸入事件(如按鍵、觸摸屏事件)的響應超過5秒
意向接受器(intentReceiver)超過10秒鐘仍未執行完畢
Android應用程序完全運行在一個獨立的線程中(例如main)。這就意味著,任何在主線程中運行的,需要消耗大量時間的操作都會引發ANR。因為此時,你的應用程序已經沒有機會去響應輸入事件和意向廣播(Intentbroadcast)。
因此,任何運行在主線程中的方法,都要盡可能的只做少量的工作。特別是活動生命周期中的重要方法如onCreate()和 onResume()等更應如此。潛在的比較耗時的操作,如訪問網絡和數據庫;或者是開銷很大的計算,比如改變位圖的大小,需要在一個單獨的子線程中完成(或者是使用異步請求,如數據庫操作)。但這并不意味著你的主線程需要進入阻塞狀態已等待子線程結束 -- 也不需要調用Therad.wait()或者Thread.sleep()方法。取而代之的是,主線程為子線程提供一個句柄(Handler),讓子線程在即將結束的時候調用它(xing:可以參看Snake的例子,這種方法與以前我們所接觸的有所不同)。使用這種方法涉及你的應用程序,能夠保證你的程序對輸入保持良好的響應,從而避免因為輸入事件超過5秒鐘不被處理而產生的ANR。這種實踐需要應用到所有顯示用戶界面的線程,因為他們都面臨著同樣的超時問題。
53. 什么情況會導致Force Close ?如何避免?能否捕獲導致其的異常?
答:一般像空指針啊,可以看起logcat,然后對應到程序中 來解決錯誤
54. Android本身的api并未聲明會拋出異常,則其在運行時有無可能拋出runtime異常,你遇到過嗎?諾有的話會導致什么問題?如何解決?
55. 簡要解釋一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver
答:一個activity呈現了一個用戶可以操作的可視化用戶界面
一個service不包含可見的用戶界面,而是在后臺無限地運行
可以連接到一個正在運行的服務中,連接后,可以通過服務中暴露出來的借口與其進行通信
一個broadcast receiver是一個接收廣播消息并作出回應的component,broadcastreceiver沒有界面
intent:content provider在接收到ContentResolver的請求時被激活。
activity, service和broadcast receiver是被稱為intents的異步消息激活的。
一個intent是一個Intent對象,它保存了消息的內容。對于activity和service來說,它指定了請求的操作名稱和待操作數據的URI
Intent對象可以顯式的指定一個目標component。如果這樣的話,android會找到這個component(基于manifest文件中的聲明)并激活它。但如果一個目標不是顯式指定的,android必須找到響應intent的最佳component。
它是通過將Intent對象和目標的intent filter相比較來完成這一工作的。一個component的intent filter告訴android該component能處理的intent。intent filter也是在manifest文件中聲明的。
56. IntentService有何優點?
答:IntentService 的好處
* Acitivity的進程,當處理Intent的時候,會產生一個對應的Service
* Android的進程處理器現在會盡可能的不kill掉你
* 非常容易使用
57. 橫豎屏切換時候activity的生命周期?
1、不設置Activity的android:configChanges時,切屏會重新調用各個生命周期,切橫屏時會執行一次,切豎屏時會執行兩次
2、設置Activity的android:configChanges="orientation"時,切屏還是會重新調用各個生命周期,切橫、豎屏時只會執行一次
3、設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命周期,只會執行onConfigurationChanged方法
如何將SQLite數據庫(dictionary.db文件)與apk文件一起發布?
解答:可以將dictionary.db文件復制到Eclipse Android工程中的res aw目錄中。所有在res aw目錄中的文件不會被壓縮,這樣可以直接提取該目錄中的文件??梢詫ictionary.db文件復制到res aw目錄中
58. 如何將打開res aw目錄中的數據庫文件?
解答:在Android中不能直接打開res aw目錄中的數據庫文件,而需要在程序第一次啟動時將該文件復制到手機內存或SD卡的某個目錄中,然后再打開該數據庫文件。復制的基本方法是使用getResources().openRawResource方法獲得res aw目錄中資源的 InputStream對象,然后將該InputStream對象中的數據寫入其他的目錄中相應文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法來打開任意目錄中的SQLite數據庫文件。
59. Android引入廣播機制的用意?
答:a:從MVC的角度考慮(應用程序內)
其實回答這個問題的時候還可以這樣問,android為什么要有那4大組件,現在的移動開發模型基本上也是照搬的web那一套MVC架構,只不過是改了點嫁妝而已。android的四大組件本質上就是為了實現移動或者說嵌入式設備上的MVC架構,它們之間有時候是一種相互依存的關系,有時候又是一種補充關系,引入廣播機制可以方便幾大組件的信息和數據交互。