9419頁最新一線互聯網Android面試題解析大全

網上高級工程師面試相關文章魚龍混雜,要麼一堆內容,要麼內容質量太淺, 鑑於此我整理了以下安卓開發高級工程師面試題以及答案幫助你們順利進階,下面進入正題:android

1、Android相關

1.Activity

1.1生命週期

  • Activity A 啓動另外一個Activity B,回調以下:

Activity A 的onPause() → Activity B的onCreate() → onStart() → onResume() → Activity A的onStop();若是B是透明主題又或則是個DialogActivity,則不會回調A的onStop;git

  • 使用onSaveInstanceState()保存簡單,輕量級的UI狀態
lateinit var textView: TextView
var gameState: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    gameState = savedInstanceState?.getString(GAME_STATE_KEY)
    setContentView(R.layout.activity_main)
    textView = findViewById(R.id.text_view)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle?) {
    textView.text = savedInstanceState?.getString(TEXT_VIEW_KEY)
}
override fun onSaveInstanceState(outState: Bundle?) {
    outState?.run {
        putString(GAME_STATE_KEY, gameState)
        putString(TEXT_VIEW_KEY, textView.text.toString())
    }
    super.onSaveInstanceState(outState)
}

1.2如何保存Activity的狀態?

通常來講,調用onPause()和onStop()方法後的Activity實例仍然存在於內存中,Activity的全部信息和狀態數據不會消失,當Activity從新回到前臺後,全部的改變都會獲得保留。github

可是當系統內存不足時,調用onPause()和onStop()方法後的Activity可能會被系統摧毀,此時內存中就不會存有該Activity的實例對象了。若是以後這個Activity從新回到前臺,以前所作的改變就會消失,爲避免此種狀況的發生,咱們能夠複寫onSaveIntanceState()方法。onSaveInatanceState()方法接受一個Bundle類型的參數,開發者能夠將狀態數據存儲到這個Bundle對象中。若是滴啊用onSaveInstanceState()方法,調用將發生在onPause()或onStop()方法以前。面試

1.3如何保存 Activity 的狀態?

Activity 的狀態一般狀況下系統會自動保存的,只有當咱們須要保存額外的數據時才須要使用到這樣的功能。數據庫

通常來講, 調用 onPause()和 onStop()方法後的 activity 實例仍然存在於內存中, activity的全部信息和狀態數據不會消失, 當 activity 從新回到前臺以後, 全部的改變都會獲得保留。安全

可是當系統內存不足時, 調用 onPause()和 onStop()方法後的 activity 可能會被系統摧毀, 此時內存中就不會存有該activity 的實例對象了。若是以後這個 activity 從新回到前臺, 以前所做的改變就會消失。爲了不此種狀況的發生 ,咱們能夠覆寫 onSaveInstanceState() 方法。onSaveInstanceState()方法接受一個 Bundle類型的參數, 開發者能夠將狀態數據存儲到這個Bundle對象中, 這樣即便activity被系統摧毀,當用戶從新啓動這個activity而調用它的onCreate()方法時, 上述的 Bundle 對象會做爲實參傳遞給onCreate()方法, 開發者能夠從 Bundle 對象中取出保存的數據, 而後利用這些數據將 activity恢復到被摧毀以前的狀態。性能優化

須要注意的是, onSaveInstanceState()方法並非必定會被調用的, 由於有些場景是不須要保存狀態數據的. 好比用戶按下 BACK 鍵退出 activity 時, 用戶顯然想要關閉這個 activity, 此時是沒有必要保存數據以供下次恢復的, 也就是 onSaveInstanceState() 方法不會被調用. 若是調用onSaveInstanceState()方法, 調用將發生在 onPause()或 onStop()方法以前。服務器

@Override
   protected void onSaveInstanceState(Bundle outState) {
    // TODO Auto-generated method stub super.onSaveInstanceState(outState);
}
  • 1.4 兩個Activity之間跳轉時必然會執行的是哪幾個方法?
  • 1.5 橫豎屏切換時Activity的生命週期
  • 1.6 如何將一個Activity設置成窗口的樣式
  • 1.7 如何退出Activity?如何安全退出已調用多個Activity的Application?
  • 1.8 Android中的Context, Activity,Appliction有什麼區別?

........網絡

面試題解析內容所有免費分享, 有須要完整版的小夥伴【點擊我】免費獲取哦!

2.Service

2.1Service是否在main thread中執行, service裏面是否能執行耗時的操做?

默認狀況,若是沒有顯示的指servic所運行的進程, Service和activity是運行在當前app所在進程的main thread(UI主線程)裏面。數據結構

service裏面不能執行耗時的操做(網絡請求,拷貝數據庫,大文件 )

特殊狀況 ,能夠在清單文件配置 service 執行所在的進程 ,讓service在另外的進程中執行。

<service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
        </service>

2.2Activity怎麼和Service綁定,怎麼在Activity中啓動本身對應的Service?

Activity經過bindService(Intent service, ServiceConnection conn, int flags)跟Service進行綁定,當綁定成功的時候Service會將代理對象經過回調的形式傳給conn,這樣咱們就拿到了Service提供的服務代理對象。

在Activity中能夠經過startService和bindService方法啓動Service。通常狀況下若是想獲取Service的服務對象那麼確定須要經過bindService()方法,好比音樂播放器,第三方支付等。若是僅僅只是爲了開啓一個後臺任務那麼可使用startService()方法。

2.3說說Activity、Intent、Service是什麼關係

他們都是Android開發中使用頻率最高的類。其中Activity和Service都是Android四大組件之一。他倆都是Context類的子類ContextWrapper的子類,所以他倆能夠算是兄弟關係吧。不過兄弟倆各有各自的本領,Activity負責用戶界面的顯示和交互,Service負責後臺任務的處理。Activity和Service之間能夠經過Intent傳遞數據,所以能夠把Intent看做是通訊使者。

  • 2.4 Service和Activity在同一個線程嗎?
  • 2.5 Service有哪些啓動方法,有什麼區別,怎樣停用Service?
  • 2.6 什麼是IntentService?有何優勢?
  • 2.7 請描述一下Service的生命週期
  • 2.8 Service啓動過程

......

面試題解析內容所有免費分享, 有須要完整版的小夥伴【點擊我】免費獲取哦!

3. ListView

3.1ListView如何提升其效率?

當convertView爲空時,用setTag()方法爲每一個View綁定一個存放控件的ViewHolder對象。當convertView不爲空,重複利用已經建立的view的時候,使用getTag()方法獲取綁定的ViewHolder對象,這樣就避免了findViewById對控件的層層查詢,而是快速定位到控件。

① 複用ConvertView,使用歷史的view,提高效率200%
② 自定義靜態類ViewHolder,減小findViewById的次數。提高效率50%
③ 異步加載數據,分頁加載數據。
④ 使用WeakRefrence引用ImageView對象。

3.2ListView如何實現分頁加載

① 設置ListView的滾動監聽器:setOnScrollListener(new OnScrollListener{….})
在監聽器中有兩個方法: 滾動狀態發生變化的方法(onScrollStateChanged)和listView被滾動時調用的方法(onScroll)

② 在滾動狀態發生改變的方法中,有三種狀態:
手指按下移動的狀態:SCROLL_STATE_TOUCH_SCROLL: // 觸摸滑動
慣性滾動(滑翔(flgin)狀態):SCROLL_STATE_FLING: // 滑翔
靜止狀態: SCROLL_STATE_IDLE: // 靜止

對不一樣的狀態進行處理:

分批加載數據,只關心靜止狀態:關心最後一個可見的條目,若是最後一個可見條目就是數據適配器(集合)裏的最後一個,此時可加載更多的數據。在每次加載的時候,計算出滾動的數量,當滾動的數量大於等於總數量的時候,能夠提示用戶無更多數據了。

3.3ListView能夠顯示多種類型的條目嗎

這個固然能夠的,ListView顯示的每一個條目都是經過baseAdapter的getView(int position, View convertView, ViewGroup parent)來展現的,理論上咱們徹底可讓每一個條目都是不一樣類型的view。

好比:從服務器拿回一個標識爲id=1,那麼當id=1的時候,咱們就加載類型一的條目,當id=2的時候,加載類型二的條目。常見佈局在資訊類客戶端中能夠常常看到。

除此以外adapter還提供了getViewTypeCount()和getItemViewType(int position)兩個方法。在getView方法中咱們能夠根據不一樣的viewtype加載不一樣的佈局文件。

  • 3.4當ListView數據集改變後,如何更新ListView
  • 3.5ListView如何定位到指定位置
  • 3.6如何在ScrollView中如何嵌入ListView
  • 3.7ListView中如何優化圖片
  • 3.8ListView中圖片錯位的問題是如何產生的

......

4.Fragment

  • 什麼是Fragment ?
  • Fragment的生命週期
  • Fragment的使用方式
  • Fragment 生命週期和 Activity 對比
  • 什麼是Fragment的回退棧?
  • Fragment重疊問題

......

5.Android 性能優化

  • 如何對Android應用進行性能分析
  • 什麼狀況下會致使內存泄露
  • 如何避免OOM異常
  • Android中如何捕獲未捕獲的異常
  • ANR是什麼?怎樣避免和解決ANR

......

面試題解析內容所有免費分享, 有須要完整版的小夥伴【點擊我】免費獲取哦!

6.Handler

  • Handler Looper Message 關係是什麼?
  • Messagequeue 的數據結構是什麼?爲何要用這個數據結構?
  • Handler post 方法原理?
  • 如何在子線程中建立 Handler?

......

7.Flutter相關面試題

  • Flutter 是什麼?
  • Flutter 特性有哪些?
  • Flutter 中的生命週期
  • PlatformView
  • Platform Channel
  • Flutter 和 Dart的關係是什麼?
  • Widget 和 element 和 RenderObject 之間的關係?
  • mixin extends implement 之間的關係?
  • 使用mixins的條件是什麼?

最後

面試是跳槽漲薪最直接有效的方式,如今能夠開始準備明年春季的面試了,各位作好面試造飛機,工做擰螺絲的準備了嗎?

掌握了這些知識點,面試時在候選人中又能夠奪目很多,暴擊9999點。機會都是留給有準備的人,只有充足的準備,纔可能讓本身能夠在候選人中脫穎而出。

如下是全部面試題資料截圖:

面試題解析內容所有免費分享, 有須要完整版的小夥伴【點擊我】免費獲取哦!
相關文章
相關標籤/搜索