妥妥的去面試之Android基礎(一)

樹獺非懶發表於2019-02-12

筆者由於在近期需要找工作,所以近期最主要的任務就是準備面試,不打無準備之仗。只有你準備充分了,那麼你想得到的機會才可能有機會入你懷中。

筆者會將準備面試的學習過程記錄下來,方便自己覆盤的同時也希望能給一道找工作的小夥伴們一些幫助。筆者準備的內容大綱如下

Android面試大綱.png

那麼開始上正菜QAQ

1.什麼是ANR?出現的原因是什麼?實際開發中如何解決?

  • ANR在Android中表示應用程式無響應。對於一些事件都需要在一定的時間內完成,在這個時間範圍如果沒能得到有效的響應,就會造成ANR。
  • (1)比較常見的原因是主執行緒進行了大量耗時的操作(2)多執行緒操作引起的死鎖,主執行緒被鎖住了(3)系統資源耗盡(管道、CPU、io)
  • 在實際開發中,ANR很難從程式碼中發現問題,在發生ANR時系統會生成一個trace.txt文字日誌檔案,通過分析這個檔案可以定位到問題出現的地方。

參考:Android開發藝術探索 P496

延伸:

準確的說是ANR機制,它可以分為兩部分:

  • ANR監測機制。Android對於不同的ANR型別(Broadcast, Service, InputEvent)都有一套監測機制。
  • ANR報告機制。在監測到ANR以後,需要顯示ANR對話方塊、輸出日誌(發生ANR時的程式函式呼叫棧、CPU使用情況等)。

ANR的一般型別

1. KeyDispatchTimeout(常見): input事件在5S內沒有處理完成發生了ANR。

2. BroadcastTimeout : 前臺Broadcast:onReceiver在10S內沒有處理完成發生ANR。 後臺Broadcast:onReceiver在60s內沒有處理完成發生ANR。

3. ServiceTimeout : 前臺Service:onCreate,onStart,onBind等生命週期在20s內沒有處理完成發生ANR。 後臺Service:onCreate,onStart,onBind等生命週期在200s內沒有處理完成發生ANR

4. ContentProviderTimeout : ContentProvider 在10S內沒有處理完成發生ANR

可參考此文章

2.談談Activity和Fragment的生命週期

生命週期.png

onStart和onStop、onPause和onResume這兩對看起來差不多,有什麼區別呢?

最明顯的區別在於onStart和onStop這一對是從Activity是否可見這個角度來回撥的,onResume和onPause是從Activity是否位於前臺這個角度來回撥的。

onPause能不能執行耗時的操作?

不可以,耗時的操作應該儘量放在onStop中去做,這樣可以讓新的Activity儘快顯示出來並切換到前臺。

注意:棧頂的Activity需要先onPause後(消失於前臺),新的Activity才能啟動。

3.橫豎屏切換時Activity的生命週期

  • 不設定Activity的android:configChanges時,切屏會重新呼叫各個生命週期,切橫屏時會執行1次,切豎屏時會執行2次
  • 設定Activity的android:configChanges="orientation"時,切屏還是會重新呼叫各個生命週期,切橫、豎屏時只會執行一次
  • 設定Activity的android:configChanges="orientation|keyboardHidden|screenSize"時,切屏不會重新呼叫各個生命週期,只會執行onConfigurationChanged方法

系統配置發生改變後,比如橫豎屏切換,它的onPause、onStop、onDestroy都會被呼叫,同時Activity是在異常情況下終止的,系統就會在onStop方法之前呼叫onSaveInstanceState來儲存當前Activity的狀態。 在螢幕方向切換回來的時候,會依次呼叫onCreate、onStart、onResume方法,並可以在onRestoreInstanceState和onCrate中取出之前儲存的資料並恢復。

注意: onSaveInstanceState只會在Activity被異常終止的情況下呼叫。

4.Android中程式的級別和它們的區別

  • 前臺程式:它是與使用者進行互動的Activity或者Activity用到的Service等,它的優先順序最高,最晚被殺死。
  • 可見程式:可以是處於暫停狀態的Activity或者繫結在其上面的Service,使用者可見但是不可互動,優先順序低於前臺程式。
  • 服務程式:是一個Service,系統不到前臺程式和可見程式活不下去時不會殺它。
  • 後臺程式:執行著onStop方法而停止的程式,當系統記憶體不夠它就首先被殺死。
  • 空程式:不包含應用程式的程式元件的程式,保留這類程式的唯一理由是快取記憶體,這樣可以提高下次一個元件要執行它時的啟動速度。系統經常為了平衡程式快取記憶體和底層的核心快取記憶體之間的整體系統資而殺死它們。

5.Android版本的新特性你知道哪些?

這個我知道的不是很全,Android5.0有一個MaterialDesign的設計風格。Android6.0的動態許可權管理。Android7.0的分屏多工,Android8.0的畫中畫。

Android5.0新特性

  • MaterialDesign設計風格
  • 支援多種裝置
  • 支援64位ART虛擬機器

Android6.0新特性

  • 動態許可權管理
  • 支援快速充電的切換
  • 支援資料夾拖拽應用
  • 相機新增專業模式

Android7.0新特性

  • 分屏多工
  • 增強的Java8語言模式
  • 夜間模式

Android8.0新特性

  • 畫中畫
  • 通知標誌
  • 自動填充框架
  • 系統優化
  • 後臺限制
  • 等等優化很多

相關文章