Activity基礎相關
說下Activity生命周期 ?
Activity A 啟動另一個Activity B 會調用哪些方法?如果B是透明主題的又或則是個DialogActivity呢 ?
說下onSaveInstanceState()方法的作用 ? 何時會被調用?
說下 Activity的四種啟動模式、應用場景 ?
了解哪些Activity常用的标記位Flags?
說下 Activity跟window,view之間的關系?
橫豎屏切換的Activity生命周期變化?
如何啟動其他應用的Activity?
Activity的啟動過程?(重點)
Fragment基礎相關
談一談Fragment的生命周期 ?與Activity生命周期的不同 ?
談談Activity和Fragment的差別?
Fragment中add與replace的差別(Fragment重疊)
getFragmentManager、getSupportFragmentManager 、getChildFragmentManager之間的差別?
FragmentPagerAdapter與FragmentStatePagerAdapter的差別與使用場景
Service基礎相關
談一談Service的生命周期?
Service的兩種啟動方式?差別在哪?
如何保證Service不被殺死 ?
能否在Service開啟耗時操作 ?怎麼做 ?
用過哪些系統Service ?
了解ActivityManagerService嗎?發揮什麼作用(重點)
Broadcast Receiver基礎相關
廣播有幾種形式 ? 都有什麼特點 ?
廣播的兩種注冊方式 ?
廣播發送和接收的原理了解嗎 ?(Binder機制、AMS)
ContentProvider基礎相關
ContentProvider了解多少?
ContentProvider的權限管理?
說說ContentProvider、ContentResolver、ContentObserver 之間的關系?
資料存儲相關
描述一下Android資料持久存儲方式?
SharedPreferences的應用場景?注意事項?
SharedPrefrences的apply和commit有什麼差別?
了解SQLite中的事務操作嗎?是如何做的
使用SQLite做批量操作有什麼好的方法嗎?
如何删除SQLite中表的個别字段?
使用SQLite時會有哪些優化操作?
IPC(重點)
Android中程序和線程的關系?差別?
如何開啟多程序 ?應用是否可以開啟N個程序 ?
為何需要IPC?多程序通信可能會出現的問題?
Android中IPC方式、各種方式優缺點,為什麼選擇Binder?
Binder機制的作用和原理?
Binder架構中ServiceManager的作用?
Bundle傳遞對象為什麼需要序列化?Serialzable和Parcelable的差別?
講講AIDL?原理是什麼?如何優化多子產品都使用AIDL的情況?
View相關
講下View的繪制流程?
MotionEvent是什麼?包含幾種事件?什麼條件下會産生?
描述一下View事件傳遞分發機制?
如何解決View的事件沖突 ?舉個開發中遇到的例子 ?
scrollTo()和scollBy()的差別?
Scroller是怎麼實作View的彈性滑動?
invalidate()和postInvalidate()的差別 ?
SurfaceView和View的差別?
自定義View如何考慮機型适配 ?
Handler相關
談談消息機制Handler ? 作用 ?有哪些要素 ?流程是怎樣的 ?
一個線程能否建立多個Handler,Handler跟Looper之間的對應關系 ?
軟引用跟弱引用的差別
Handler 引起的記憶體洩露原因以及最佳解決方案
為什麼系統不建議在子線程通路UI
Looper死循環為什麼不會導緻應用卡死
使用Handler的postDealy後消息隊列會有什麼變化 ?
可以在子線程直接new一個Handler嗎 ?怎麼做 ?
Message可以如何建立 ?哪種效果更好 ?為什麼 ?
線程(重點)相關
線程池的好處?線程池的幾個參數的了解,四種線程池的使用場景
Android中還了解哪些友善線程切換的類?
講講AsyncTask的原理
IntentService有什麼用 ?
直接在Activity中建立一個thread跟在service中建立一個thread之間的差別
ThreadPoolExecutor的工作政策 ?
Handler、Thread和HandlerThread的差别?
ThreadLocal的原理
多線程是否一定會高效(優缺點)
多線程中,讓你做一個單例,你會怎麼做
除了notify還有什麼方式可以喚醒線程
什麼是ANR ? 什麼情況會出現ANR ?如何避免 ?在不看代碼的情況下如何快速定位出現ANR問題所在 ?
Bitmap相關
Bitmap使用需要注意哪些問題 ?
Bitmap.recycle()會立即回收麼?什麼時候會回收?如果沒有地方使用這個Bitmap,為什麼垃圾回收不會直接回收?
一張Bitmap所占記憶體以及記憶體占用的計算
Android中緩存更新政策 ?
LRU的原理 ?
性能優化(重點)
圖檔的三級緩存中,圖檔加載到記憶體中,如果記憶體快爆了,會發生什麼?怎麼處理?
記憶體中如果加載一張500*500的png高清圖檔.應該是占用多少的記憶體?
WebView的性能優化 ?
Bitmap如何處理大圖,如一張30M的大圖,如何預防OOM
記憶體回收機制與GC算法(各種算法的優缺點以及應用場景);GC原理時機以及GC對象
記憶體洩露和記憶體溢出的差別 ?AS有什麼工具可以檢測記憶體洩露
性能優化,怎麼保證應用啟動不卡頓? 黑白屏怎麼處理?
強引用置為null,會不會被回收?
ListView跟RecyclerView的差別
ListView的adapter是什麼adapter ?
LinearLayout、FrameLayout、RelativeLayout性能對比,為什麼?
JNI相關
對JNI是否了解
如何加載NDK庫 ?如何在JNI中注冊Native函數,有幾種注冊方法 ?
你用JNI來實作過什麼功能 ?怎麼實作的 ?(加密處理、影音方面、圖形圖像處理)
設計模式相關
你所知道的設計模式有哪些?
談談MVC、MVP和MVVM,好在哪裡,不好在哪裡 ?
封裝p層之後.如果p層資料過大,如何解決
是否能從Android中舉幾個例子說說用到了什麼設計模式 ?
裝飾模式和代理模式有哪些差別 ?
實作單例模式有幾種方法 ?懶漢式中雙層鎖的目的是什麼 ?兩次判空的目的又是什麼?
用到的一些開源架構,介紹一個看過源碼的,内部實作過程。
Fragment如果在Adapter中使用應該如何解耦?
Android進階延伸點
如何進行單元測試,如何保證App穩定
Android中如何檢視一個對象的回收情況
APK的大小如何壓縮 ?
如何通過Gradle配置多管道包?
插件化原理分析
組建化原理
跨元件通信
元件化中路由、埋點的實作
Hook以及插樁技術
Android的簽名機制
v3簽名key和v2還有v1有什麼差別
Android5.0~10.0之間大的變化 ?
說下Measurepec這個類
請例舉Android中常用布局類型,并簡述其用法以及排版效率
差別Animation和Animator的用法,概述其原理
使用過什麼圖檔加載庫 ?Glide的源碼設計哪裡很微妙 ?
如何繞過9.0限制?
用過哪些網絡加載庫 ?OkHttp、Retrofit實作原理 ?
對于應用更新這塊是如何做的 ?(灰階,強制更新、分區域更新)
會用Kotlin、Fultter嗎 ?談談你的了解
答篇
1、說下Activity生命周期 ?
參考解答:在正常情況下,Activity的常用生命周期就隻有如下7個
onCreate():表示Activity正在被建立,常用來初始化工作,比如調用setContentView加載界面布局資源,初始化Activity所需資料等;
onRestart():表示Activity正在重新啟動,一般情況下,目前Acitivty從不可見重新變為可見時,OnRestart就會被調用;
onStart():表示Activity正在被啟動,此時Activity可見但不在前台,還處于背景,無法與使用者互動;
onResume():表示Activity獲得焦點,此時Activity可見且在前台并開始活動,這是與onStart的差別所在;
onPause():表示Activity正在停止,此時可做一些存儲資料、停止動畫等工作,但是不能太耗時,因為這會影響到新Activity的顯示,onPause必須先執行完,新Activity的onResume才會執行;
onStop():表示Activity即将停止,可以做一些稍微重量級的回收工作,比如登出廣播接收器、關閉網絡連接配接等,同樣不能太耗時;
onDestroy():表示Activity即将被銷毀,這是Activity生命周期中的最後一個回調,常做回收工作、資源釋放;
延伸:從整個生命周期來看,onCreate和onDestroy是配對的,分别辨別着Activity的建立和銷毀,并且隻可能有一次調用;
從Activity是否可見來說,onStart和onStop是配對的,這兩個方法可能被調用多次;
從Activity是否在前台來說,onResume和onPause是配對的,這兩個方法可能被調用多次;
除了這種差別,在實際使用中沒有其他明顯差別;
2、談一談Fragment的生命周期?
參考回答:Fragment從建立到銷毀整個生命周期中涉及到的方法依次為:onAttach()→onCreate()→ onCreateView()→onActivityCreated()→onStart()→onResume()→onPause()→onStop()→onDestroyView()→onDestroy()→onDetach(),其中和Activity有不少名稱相同作用相似的方法,而不同的方法有:
onAttach():當Fragment和Activity建立關聯時調用;
onCreateView():當fragment建立視圖調用,在onCreate之後;
onActivityCreated():當與Fragment相關聯的Activity完成onCreate()之後調用;
onDestroyView():在Fragment中的布局被移除時調用;
onDetach():當Fragment和Activity解除關聯時調用;
3、談一談Service的生命周期?
參考回答:Service的生命周期涉及到六大方法
onCreate():如果service沒被建立過,調用startService()後會執行onCreate()回調;如果service已處于運作中,調用startService()不會執行onCreate()方法。也就是說,onCreate()隻會在第一次建立service時候調用,多次執行startService()不會重複調用onCreate(),此方法适合完成一些初始化工作;
onStartComand():服務啟動時調用,此方法适合完成一些資料加載工作,比如會在此處建立一個線程用于下載下傳資料或播放音樂;
onBind():服務被綁定時調用;
onUnBind():服務被解綁時調用;
onDestroy():服務停止時調用;
4、廣播有幾種形式 ? 都有什麼特點 ?
參考回答:普通廣播:開發者自身定義 intent的廣播(最常用),所有的廣播接收器幾乎會在同一時刻接受到此廣播資訊,接受的先後順序随機;
有序廣播:發送出去的廣播被廣播接收者按照先後順序接收,同一時刻隻會有一個廣播接收器能夠收到這條廣播消息,當這個廣播接收器中的邏輯執行完畢後,廣播才會繼續傳遞,且優先級(priority)高的廣播接收器會先收到廣播消息。有序廣播可以被接收器截斷使得後面的接收器無法收到它;
本地廣播:僅在自己的應用内發送接收廣播,也就是隻有自己的應用能收到,資料更加安全,效率更高,但隻能采用動态注冊的方式;
粘性廣播:這種廣播會一直滞留,當有比對該廣播的接收器被注冊後,該接收器就會收到此條廣播;
5、ContentProvider了解多少?
參考回答:ContentProvider作為四大元件之一,其主要負責存儲和共享資料。與檔案存儲、SharedPreferences存儲、SQLite資料庫存儲這幾種資料存儲方法不同的是,後者儲存下的資料隻能被該應用程式使用,而前者可以讓不同應用程式之間進行資料共享,它還可以選擇隻對哪一部分資料進行共享,進而保證程式中的隐私資料不會有洩漏風險。
更多面試答案解析大全下載下傳位址:
https://shimo.im/docs/3Tvytq686Yyv83KX