Android面試

數據結構與算法
各類開源框架使用與原理(okhttp glide gson Rxjava Retrofit ButterKnife dagger等) 各類設計模式(命令模式 觀察者模式 抽象工廠模式 build模式 適配器模式 生產者/消費者 裝飾者模式 外觀模式等) 各類架構(MVP MVC MVVM) 網絡(http https udp等) 組件化 模塊化 插件化 熱修復 IPC AIDL JNI NDK Bindler SQLite 多線程 鎖 進程 內存 jvm dvm 以上部分自行查找相關資料html

Android進程優先級: 前臺、可見、服務、後臺、空java

Android任務棧: 不惟一 後進先出linux

activity啓動模式: standard:無論任務棧中是否有 都建立 singleTop:棧頂複用 棧頂有就複用 沒有就建立 singleTask:任務棧中有 就移到棧頂 沒有就建立 singleinstance:有且只有一個實例 而且獨享整個任務棧android

scheme跳轉協議: 服務端定製跳轉頁面 h5跳轉原生頁面 一個app跳轉到另外一個app算法

Fragment爲何別稱爲第五大組件: 3.0引入 起初爲了適應平板大屏幕 比activity內存小 動態靈活加載 依附於activity數據庫

FragmentPagerAdapter和FragmentStatePagerAdapter的區別 前者適用於較少的頁面 後者適用於較多的頁面 後者切換時有釋放Fragment對象 前者切換時 脫離UI並無回收對象json

Fragment生命週期 onAttach onCreate onCreateView onViewCreate onActivityCreated onDestoryView onDetachsegmentfault

Fragment通訊 Fragment調用activity的方法 getActivity activity調用Fragment的方法 接口回調 Fragment調用Fragment的方法 先getactivity 再findFragmentById對應的Fragment設計模式

Fragment的replace、add、remove 方法 replace(FragmentManager的方法)替換實例 add 將實例添加到最上層 remove 將實例移除緩存

Service是什麼: 後臺長期運行而沒有用戶界面 能夠由廣播、activity啓動 運行在主線程中 不能作耗時操做

Service和Thread的區別 Android的後臺指徹底不依賴於UI線程 Service輕量級的IPC通訊

Service啓動方式 startService bindService

廣播使用場景 同一個app具備多個進程的不一樣組件之間的消息通訊 不一樣app之間組件的通訊

廣播的種類 普通廣播 有序廣播 本地廣播(只在app內傳播)

實現廣播的方式 靜態註冊 xml中註冊 註冊完一直運行即便進程被殺死 動態註冊 代碼中註冊 跟隨activity的生命週期

廣播內部實現機制 1.廣播接收者BroadcastReceiver經過Binder機制向AMS(Activity Manager Service)進行註冊; 2.廣播發送者經過binder機制向AMS發送廣播; 3.AMS查找符合相應條件(IntentFilter/Permission等)的BroadcastReceiver,將廣播發送到BroadcastReceiver(通常狀況下是Activity)相應的消息循環隊列中; 4.消息循環執行拿到此廣播,回調BroadcastReceiver中的onReceive()方法。

本地廣播 別的app沒法接受 別的app沒法對本身的app發送廣播 比系統的全局廣播更加高效 以上都是由於 經過handler實現的

handler的內部機制 handler發送message到消息隊列中 loop從消息隊列循環取消息 發送給handler進行處理 handler內存泄漏(非靜態內部類隱試持有外部類的引用 GC只會回收沒有被引用或者根集不可到達的對象(取決於GC算法)) 當回收activity時 handler在作好使操做 致使handler對activity的引用沒有被釋放 致使內存泄漏 解決辦法 設爲static 或者 在activity的ondestory中 調用removeCallback

asyncTask 本質上封裝了線程池和handler的異步框架

handler和asyncTask的區別 前者 對於多個後臺任務 簡單清晰 後者 輕量級的異步任務類 反饋異步執行的進度 適用於單個或者少許異步任務

asyncTask注意事項 內存泄漏(同handler) 生命週期(不跟隨activity 須要主動調用cancel方法保證程序穩定) 結果丟失 (屏幕旋轉 系統回收 持有的是以前的activity的引用 則結果無效)

handlerThread產生背景 開啓Thread子線程進行耗時操做 屢次建立和銷燬線程是很耗系統資源的

handlerThread特色 本質上是線程類 繼承了Thread 有本身的looper對象 能夠進行looper循環 經過looper對象傳遞給handler對象 能夠在handleMessage方法中執行異步任務 優勢是不會堵塞 減小性能的消耗 缺點不能同時進行多任務處理 效率低 與線程池注重併發不一樣 handlerThread是一個串行隊列,背後只有一個線程

IntentService 本質封裝了handlerThread和handler的異步框架 能夠作耗時操做(有異步方法) 繼承自Service 異步請求類 當任務執行完成後會自動中止 比Service優先級高 能夠開啓屢次 但實例只有一個 執行完第一個任務後再執行第二個任務(實際上是handler在處理)

bitmap優化 recycle lru 計算insamplesize 縮略圖 三級緩存

ui卡頓原理 1秒60幀 16ms每幀 overdraw 有大量重疊部分 好比重合的View都有本身的背景 過分繪製 同一幀屢次繪製

ui卡頓緣由分析 人爲的在ui線程中作輕微的耗時操做,致使卡頓 佈局layout過於複雜,沒法在16ms內渲染完成 同一時間動畫執行次數過多,致使cpu和gpu負載太重 View的過分繪製,致使某些像素在同一幀時間內被繪製屢次,致使cpu和gpu負載太重 View頻繁的出發measure layout 致使耗時過多 內存頻繁觸發GC 致使暫時阻塞渲染操做 冗餘資源及邏輯等致使加載和執行緩慢 anr

ui卡頓優化 佈局優化(使用include merge等標籤 儘可能不要嵌套 使用比重代替長寬 自定義View代替複雜) 列表及adapter優化 背景和圖片等內存分配優化 避免anr

java內存分配策略 一、靜態存儲區 二、棧區 三、堆區

java是如何管理內存的

java中的內存泄漏 定義:無用對象持續佔有內存或者無用對象的內存得不到及時釋放

Android中內存泄漏 一、單例 二、匿名內部類 三、handler 四、避免使用static變量 五、資源未關閉(廣播、遊標、數據庫、stream 、socket、bitpam) 五、asyncTask

內存管理機制概述 一、分配機制 二、回收機制

Android內存管理機制 一、分配機制 二、回收機制

內存管理機制目標 一、更少的佔用內存 二、合適的時候,合理的釋放系統資源 三、在系統緊張的時候,釋放掉大部分不重要的資源 四、合理的在特殊的生命週期中,保存或者還原重要數據,以致於系統可以正確的恢復應用

Android內存優化方法 一、當Service完成任務後,儘可能中止它 二、當UI不可見的時候,釋放掉一些只有ui使用的資源 三、在系統內存緊張的時候,儘量多的釋放掉一些非重要資源 四、避免濫用bitmap致使內存浪費 五、使用針對內存優化過的數據容器(少用枚舉 消耗的內存是常量的兩倍多 ) 六、避免使用依賴注入的框架 七、使用ZIP對齊的APK 八、使用多進程

如何對冷啓動進行優化 一、減小onCreate方法的工做量 二、不要讓Application參與業務操做 ,也不要進行耗時操做 三、不要以靜態變量的方式在Application中保存數據 四、佈局優化

Android不用靜態變量存儲數據 一、靜態變量數據因爲進程被殺死而初始化 二、使用其餘方式:文件、視頻、contentprovider

有關sharepreference的問題 一、不能誇進程同步 二、存儲的文件過大(取值致使阻塞主線程 產生大量臨時變量 一直存儲在內存中)

其餘優化 內存對象序列化 序列化:將對象的狀態信息轉化爲能夠存儲或傳輸的形式的過程 Serializeble(java自帶 在使用內存時比Serializeble性能高 序列化時產生大量臨時變量 頻繁垃圾回收) Parcelble(Android自帶 不可用於磁盤數據的序列化 不能保證數據的持續性 用於進程間的數據傳遞)

MVC模式 簡單來講就是經過controller的控制去操做model層的數據,而且返回給view層展現 你們想過這樣會有什麼問題嗎?顯然是有的,否則爲何會有MVP和MVVM的誕生呢,是吧。問題就在於xml做爲view層,控制能力實在太弱了,你想去動態的改變一個頁面的背景,或者動態的隱藏/顯示一個按鈕,這些都沒辦法在xml中作,只能把代碼寫在activity中,形成了activity既是controller層,又是view層的這樣一個窘境 定義: 一、M: 業務邏輯 二、V:處理數據顯示的操做 三、C:Activity處理用戶交互問題 特色: 一、耦合性低 二、可擴展性好 三、模塊職責劃分明確

進程保活方案 一、利用系統廣播拉活 不及時 二、利用系統Service機制拉活 短期被kill超過三次就拉不活了(將Service 設置爲 START_STICKY狀態) 三、利用Native進程拉活(利用Linux 中的 fork 機制建立 Native 進程,在 Native 進程中監控主進程的存活,當主進程掛掉後,在 Native 進程中當即對主進程進行拉活。在主進程中建立一個監控文件,在主進程中持有文件鎖。拉活進程啓動後,申請文件鎖將會被堵塞,一旦能夠成功獲取到鎖,說明主進程掛掉,便可進行拉活5.0後失效) 四、利用JobScheduler機制拉活(5.0後) 五、利用帳號機制拉活(失效) https://segmentfault.com/a/1190000006251859

進程殺死場景 觸發系統進程管理機制 被第三方殺死 廠商殺進程 用戶主動強行中止

bindle機制 https://blog.csdn.net/weijinqian0/article/details/52233529

熱修復原理 https://blog.csdn.net/u012943767/article/details/52355214 https://www.jianshu.com/p/d10aa991ca76

http和https https://www.cnblogs.com/wqhwe/p/5407468.html

網絡請求優化 https://www.jianshu.com/p/d4c2c62ffc35

數據庫優化 https://www.jianshu.com/p/3b4452fc1bbd

Android和js交互 https://blog.csdn.net/carson_ho/article/details/64904691

Android 組件化和插件化 https://blog.csdn.net/mhhyoucom/article/details/79000072

如何導入外部數據庫 https://blog.csdn.net/gpwner/article/details/53195925

描述一次網絡請求的過程 https://blog.csdn.net/seu_calvin/article/details/53304406

Service和activity通訊 https://blog.csdn.net/qq_28468727/article/details/52144155

Android實現wap方式聯網 https://blog.csdn.net/seu_calvin/article/details/53305034

Requestlayout onlayout ondraw drawchild 區別與聯繫 https://blog.csdn.net/weixin_41101173/article/details/79726311

android中Invalidate和postInvalidate的差異 https://www.cnblogs.com/newcaoguo/p/6053288.html

動畫框架實現原理 https://www.jianshu.com/p/3683a69c38ea

Android View刷新機制 https://www.oschina.net/question/163910_27566

contentprovider https://blog.csdn.net/carson_ho/article/details/76101093

自定義View優化 https://blog.csdn.net/whb20081815/article/details/74474736

activity緩存方法 https://www.jianshu.com/p/eac026497f14

merge viewstub https://www.jianshu.com/p/62ba51bc7dbc

json優缺點 https://blog.csdn.net/ssisse/article/details/51555227

怎樣退出app https://blog.csdn.net/rabbit_in_android/article/details/50772811

res和asset的區別 https://blog.csdn.net/xiang462042190/article/details/43638299

bitmap詳細瞭解

Android長鏈接和心跳機制 https://blog.csdn.net/ttkatrina/article/details/72956338

zygote啓動過程 https://blog.csdn.net/cike110120/article/details/52157665

心跳包 https://blog.csdn.net/bless2015/article/details/52680220

XML解析方式 https://blog.csdn.net/WILLMAX_007/article/details/51416963

forceclose http://www.jb51.net/article/90176.htm

Android體系架構 https://blog.csdn.net/spy19881201/article/details/5775484

如何安全退出已調用多個activity的Application https://blog.csdn.net/debug2/article/details/6193644

dvm進程 linux進程 應用程序進程是否爲同一個概念 https://blog.csdn.net/qq_27073205/article/details/46240261

Android如何捕獲未捕獲的異常 http://www.jb51.net/article/78858.htm

Framework 工做方式及原理,Activity 是如何生成一個 view 的,機制是什麼 https://www.jianshu.com/p/34758dd69019

Android線程間通訊 1.共享變量(內存) 2.管道 3.handle機制 runOnUiThread(Runnable) view.post(Runnable)

Android 進程通訊 https://www.jianshu.com/p/ce1e35c84134

activity啓動過程 https://www.jianshu.com/p/9ecea420eb52

講解一下context https://blog.csdn.net/guolin_blog/article/details/47028975

recycleview http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0307/4032.html

LRUCache原理 https://blog.csdn.net/u012943767/article/details/51897259

啓動時長 https://blog.csdn.net/beyond_liyy/article/details/52273740

保持應用穩定性 https://www.jianshu.com/p/40681fa8b284

classLoader https://www.jianshu.com/p/a620e368389a

動態佈局 https://www.jianshu.com/p/0d6f753fdd92

減小重複代碼 https://blog.csdn.net/u011494050/article/details/40593605

sp是進程同步嗎 有什麼方法作到同步 https://www.jianshu.com/p/bdebf741221e

surfaceView https://blog.csdn.net/luoshengyang/article/details/8661317/

線程間操做list https://www.jianshu.com/p/7a7985653651

app啓動流程 從點擊桌面圖標開始 https://blog.csdn.net/hehe26/article/details/51460057

動態加載 https://www.jianshu.com/p/aa9a324626a8

構建流程 https://www.jianshu.com/p/4962634901fb

安裝過程 https://www.jianshu.com/p/21412a697eb0

dalvik art基本瞭解 https://blog.csdn.net/seu_calvin/article/details/52354964

Android 沙箱化 https://blog.csdn.net/ljheee/article/details/53191397

系統啓動流程 zygote-systemserver-各類系統服務-應用進程 https://www.jianshu.com/p/33152a7bec26 四篇都要看

recycleView 和listview 對比 https://blog.csdn.net/u014497502/article/details/50917321

synchronized和Lock的區別 https://blog.csdn.net/u012403290/article/details/64910926?locationNum=11&fps=1

listview 圖片加載錯亂原理及解決方案 https://blog.csdn.net/a394268045/article/details/50726560

動態適配權限 權限組的概念 https://www.jianshu.com/p/a37f4827079a

加載大圖 https://blog.csdn.net/zuo8787/article/details/51406986

計算view的嵌套層級 https://blog.csdn.net/zx_android/article/details/79558509

多線程實現斷點續傳 https://blog.csdn.net/tianzhaoai/article/details/56673071

封裝一個view的時候怎麼知道View的大小 https://blog.csdn.net/z82367825/article/details/52206599

下拉狀態欄會影響activity的生命週期嗎 不會

onstop作了網絡請求 onresume的時候怎麼恢復???

OOM是否能夠try catch 能夠 但不是解決之道

Android 多進程場景 https://blog.csdn.net/seu_calvin/article/details/53932171

強引用置爲null 會不會被回收 表示能夠清理了 何時清理時GC的事

AndroidManifest做用與理解 https://blog.csdn.net/garyhu1/article/details/55666816

Android開啓攝像頭的主要步驟 http://www.jb51.net/article/87424.htm

AlertDialog,popupWindow,Activity區別 https://blog.csdn.net/qq_26358311/article/details/79578376

線程如何關閉 如何防止線程的內存泄漏 http://www.jb51.net/article/42146.htm https://blog.csdn.net/qq_32618417/article/details/51703435

viewpager懶加載 https://www.jianshu.com/p/7a47907f49c2

Android studio內存泄漏分析 https://blog.csdn.net/cxq234843654/article/details/51250306

插值器估值器 https://blog.csdn.net/qq_24530405/article/details/50630744

消息機制 https://blog.csdn.net/seu_calvin/article/details/52120086

systrace https://www.2cto.com/kf/201710/688172.html

微信小紅點實現 https://www.zhihu.com/question/35462625

爲何不能再子線程中更新UI https://www.jianshu.com/p/ed1af0c6aee2 https://www.cnblogs.com/lao-liang/p/5108745.html

垃圾回收與System.gc https://blog.csdn.net/jiyiqini/article/details/46725647

相關文章
相關標籤/搜索