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

筆者因爲在近期須要找工做,因此近期最主要的任務就是準備面試,不打無準備之仗。只有你準備充分了,那麼你想獲得的機會纔可能有機會入你懷中。android

筆者會將準備面試的學習過程記錄下來,方便本身覆盤的同時也但願能給一道找工做的小夥伴們一些幫助。筆者準備的內容大綱以下面試

Android面試大綱.png

那麼開始上正菜QAQ緩存

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

  • ANR在Android中表示應用程序無響應。對於一些事件都須要在必定的時間內完成,在這個時間範圍若是沒能獲得有效的響應,就會形成ANR。
  • (1)比較常見的緣由是主線程進行了大量耗時的操做(2)多線程操做引發的死鎖,主線程被鎖住了(3)系統資源耗盡(管道、CPU、io)
  • 在實際開發中,ANR很難從代碼中發現問題,在發生ANR時系統會生成一個trace.txt文本日誌文件,經過分析這個文件能夠定位到問題出現的地方。

參考:Android開發藝術探索 P496多線程

延伸:框架

準確的說是ANR機制,它能夠分爲兩部分:ide

  • ANR監測機制。Android對於不一樣的ANR類型(Broadcast, Service, InputEvent)都有一套監測機制。
  • ANR報告機制。在監測到ANR之後,須要顯示ANR對話框、輸出日誌(發生ANR時的進程函數調用棧、CPU使用狀況等)。

ANR的通常類型函數

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

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新特性

  • 畫中畫
  • 通知標誌
  • 自動填充框架
  • 系統優化
  • 後臺限制
  • 等等優化不少
相關文章
相關標籤/搜索