Android面試知識點合集

本文均為Android常用知識點厅贪,搜集整理以供復(fù)習(xí)參考
Java知識點總結(jié),請點我

1. 常用的布局有哪些?

2. 內(nèi)存泄漏的檢測吐辙、幾種常見場景及解決方法

場景一:靜態(tài)變量持有了Activity
場景二:匿名內(nèi)部類或非靜態(tài)內(nèi)部類引起的內(nèi)存泄漏
場景三:Handler.sendMessageDelayed
場景四:Static Views
場景五:無限循環(huán)的屬性動畫

adb shelldumpsys meminfo (pid name) 查看activities數(shù)目
排查內(nèi)存泄漏最簡單和直觀的方法
Android Studio-->monitor memory -->dump java head--> *.hprof

3. 使用TraceView來進行性能調(diào)優(yōu)

Android Studio-->monitor --->CPU -->start method trace-->*.trace
Android 性能優(yōu)化:使用 TraceView 找到卡頓的元兇

4. MVC/MVP/MVVM應(yīng)用架構(gòu)設(shè)計

Android中MVP設(shè)計使用(與MVC區(qū)別)

如何構(gòu)建Android MVVM應(yīng)用程序(Databinding)
1 ViewModel與View的協(xié)作
2 ViewModel與Model的協(xié)作
3 ViewModel與ViewModel的協(xié)作

https://developer.android.com/topic/libraries/data-binding/index.html

5. SurfaceView TextureView View區(qū)別

SurfaceView與View的區(qū)別和使用場景
SurfaceView和TextureView區(qū)別分析

6. Android activity的生命周期

1 啟動時 onCreate onStart onResume
2 后臺運行時 onPause onStop
3 外接電話時 onPuase onStop
4 關(guān)閉時 onPause onStop onDestory
5 下拉狀態(tài)欄時 不執(zhí)行生命周期方法

7. Activity&Fragment生命周期解析

Fragment生命周期解析

8. Activity 定義啟動模式

standard宣决、singleTop、singleTask昏苏、singleInstance and FLAG_ACTIVITY_NEW_TASK

9. Android View重繪和更新: invalidate和requestLayout

View繪制分三個步驟尊沸,順序是:onMeasure,onLayout贤惯,onDraw洼专。
調(diào)用invalidate方法只會執(zhí)行onDraw方法;
調(diào)用requestLayout方法只會執(zhí)行onMeasure方法和onLayout方法孵构,并不會執(zhí)行onDraw方法屁商。
invalidate方法只能用于UI線程中,在非UI線程中颈墅,可直接使用postInvalidate方法蜡镶,這樣就省去使用handler的煩惱。

10. 系統(tǒng)上安裝了多種瀏覽器恤筛,能否指定某瀏覽器訪問指定頁面

Intent intent =newIntent(); 
intent.setAction("android.intent.action.VIEW"); 
Uri content_url =Uri.parse("http://www.163.com"); 
intent.setData(content_url); 
//指定瀏覽器的包名類名
intent.setClassName("com.android.browser","com.android.browser.BrowserActivity"); 
startActivity(intent);

11. ANR和Force close產(chǎn)生和原因

12. Android 橫豎屏切換(onSaveInstanceState()/onRestoreInstanceState())

  • Android 3.2 (API 級別 13)以前
  1. 不設(shè)置Activity的android:configChanges時,切屏?xí)匦抡{(diào)用各個生命周期蝌数,切橫屏?xí)r會執(zhí)行一次,切豎屏?xí)r會執(zhí)行兩次度秘。
  2. 設(shè)置Activity的android:configChanges="orientation"時顶伞,切屏還是會重新調(diào)用各個生命周期饵撑,切橫、豎屏?xí)r只會執(zhí)行一次唆貌。
  3. 設(shè)置Activity的android:configChanges="orientation|keyboardHidden"時滑潘,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfigurationChanged方法锨咙。
  • 從 Android 3.2 (API級別 13)開始
  1. 不設(shè)置Activity的android:configChanges语卤,或設(shè)置Activity的android:configChanges="orientation",或設(shè)置Activity的android:configChanges="orientation|keyboardHidden"酪刀,切屏?xí)匦抡{(diào)用各個生命周期粹舵,切橫屏?xí)r會執(zhí)行一次,切豎屏?xí)r會執(zhí)行一次骂倘。
  2. 配置 android:configChanges="orientation|keyboardHidden|screenSize"眼滤,才不會銷毀 activity,且只調(diào)用 onConfigurationChanged方法历涝。

13. Android的系統(tǒng)架構(gòu)

Android的系統(tǒng)架構(gòu)

14. JVM诅需、DVM(Dalvik VM)和ART虛擬機對比

http://blog.csdn.net/evan_man/article/details/52414390

15. [Android中AIDL的使用詳解]

(http://www.reibang.com/p/d1fac6ccee98)
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString);

16. Android進程間通信的幾種方式

  1. Bundle/Intent傳遞數(shù)據(jù)
  2. Messenger是基于AIDL實現(xiàn)的,服務(wù)端(被動方)提供一個Service來處理客戶端(主動方)連接荧库,維護一個Handler來創(chuàng)建Messenger堰塌,在onBind時返回Messenger的binder。雙方用Messenger來發(fā)送數(shù)據(jù)分衫,用Handler來處理數(shù)據(jù)场刑。示例
  3. AIDL通過定義服務(wù)端暴露的接口,以提供給客戶端來調(diào)用示例
  4. ContentProvider底層也是Binder實現(xiàn)丐箩,主要用來為其他APP提供數(shù)據(jù)[Android 總結(jié):ContentProvider 的使用]
  5. 在服務(wù)器中定義ServerSocket來監(jiān)聽端口摇邦,客戶端使用Socket來請求端口,連通后就可以進行通信.

17. Android:Touch事件分發(fā)機制

  1. dispatchTouchEvent方法只負(fù)責(zé)事件的分發(fā)屎勘,當(dāng)返回為true時施籍,順序下發(fā)會中斷。
  2. 當(dāng)某個View或者ViewGroup的onTouchEvent事件返回true時概漱,便表示它是真正要處理這次請求的View丑慎,之后的Aciton_UP和Action_MOVE將由它處理。
  3. onInterceptTouchEvent有兩個作用:1.攔截Down事件的分發(fā)瓤摧。2.中止Up和Move事件向目標(biāo)View傳遞竿裂,使得目標(biāo)View所在的ViewGroup捕獲Up和Move事件。

18. Activity布局加載流程

  • Activity的展示界面的特性是通過Window對象來控制的照弥;

  • 每個Activity對象都對應(yīng)這個一個Window對象腻异,并且Window對象的初始化在啟動Activity的時候完成,在執(zhí)行Activity的onCreate方法之前这揣;

  • 每個Window對象內(nèi)部都存在一個FrameLayout類型的mDector對象悔常,它是Acitivty界面的root view影斑;

  • Activity中的window對象的實例是PhoneWindow對象,PhoneWindow對象中的幾個成員變量mDector机打,mContentRoot矫户,mContentParent都是View組件,它們的關(guān)系是:mDector –> mContentRoot –> mContentParent –> 自定義layoutView

  • LayoutInflater.inflate主要用于將布局文件加載到內(nèi)存View組件中残邀,也可以設(shè)定加載到某一個父組件中皆辽;

  • 典型的Activity的onCreate方法中需要調(diào)用super.onCreate方法和setContentView方法,若不調(diào)用super.onCreate方法芥挣,執(zhí)行啟動該Activity的邏輯會報錯驱闷,若不執(zhí)行setContentView的方法,該Activity只會顯示一個空頁面九秀。
    其他相關(guān)流程:

  • Android 中的Activity遗嗽、Window、View之間的關(guān)系

  • 應(yīng)用進程啟動流程

  • ActivityThread的主要工作及實現(xiàn)機制

  • 應(yīng)用進程Context創(chuàng)建流程

  • Activity啟動流程

19. LruCache緩存類

  • LruCache鼓蜒,內(nèi)部使用Map保存內(nèi)存級別的緩存
  • LruCache使用泛型可以設(shè)配各種類型
  • LruCache使用了Lru算法保存數(shù)據(jù)(最短最少使用least recent use)
  • LruCache只用使用put和get方法壓入數(shù)據(jù)和取出數(shù)據(jù)

20. Android Context 是什么痹换?

Context繼承關(guān)系圖
  • Context類是一個抽象類,具體實現(xiàn)在ContextImpl類中都弹;而ContextWrapper是Context的一個包裝類(裝飾器模式)娇豫,其里面所有的方法實現(xiàn)都是調(diào)用其內(nèi)部mBase變量的方法,而mBase就是ContextImpl對象
  • ContextThemeWrapper中擴展了主題相關(guān)的方法畅厢。Application和Service是繼承自ContextWrapper冯痢,而Activity是繼承自ContextThemeWrapper(Activity在啟動的時候系統(tǒng)都會加載一個主題)

21. Java開發(fā)中的23種設(shè)計模式詳解

  • Application 單例模式
  • Broadcast 觀察者模式
  • Class.forName 工廠模式
  • ContextWrapper 裝飾器模式
  • ListView 的Adapter 適配器模式
  • new AlertDialog.Builder(this)屬于(建造者)Builder模式

22. AsyncTask 詳解

  1. 由于Handler需要和主線程交互,而Handler又是內(nèi)置于AsyncTask中框杜,所有AsyncTask的創(chuàng)建必須在主線程浦楣。
  2. AsyncTaskResult的doInBackground(Params)方法執(zhí)行異步任務(wù)運行在子線程中,其他方法運行在主線程中咪辱,可以操作UI組件振劳。
  3. 不要手動的去調(diào)用AsyncTask的onPreExecute, doInBackground, publishProgress, onProgressUpdate, onPostExecute方法,這些都是由android系統(tǒng)自動調(diào)用的油狂。
  4. 一個AsyncTask任務(wù)只能被執(zhí)行一次历恐。
  5. 運行中可以隨時調(diào)用cancel(boolean)方法取消任務(wù),如果成功調(diào)用isCancel()會返回true专筷,并不會執(zhí)行onPostExecute()弱贼,取而代之的是調(diào)用onCancelled()。從源碼看磷蛹,如果這個任務(wù)已經(jīng)執(zhí)行了這個時候調(diào)用cancel是不會真正的把task結(jié)束吮旅,而是繼續(xù)執(zhí)行,只不過改變的是執(zhí)行之后的回調(diào)方法的onPostExecute還是onCancelled.

23. 淺談PopupWindow在Android開發(fā)中的使用

  • 為什么setOutsideTouchable(false)點擊外部區(qū)域還是會關(guān)閉窗口味咳,需要重寫setContentView()鸟辅,重寫setOutsideTouchable():

23. Android 反射機制的理解

Class<?> cls=Class.forName("test.Person");//加載Person類
Object object=(Object) cls.newInstance();//實例化Person
Method setname=cls.getDeclaredMethod("setName", String.class);//獲取setName()方法
setname.invoke(object, "Lipt0n");//設(shè)置調(diào)用setName的對象和傳入setName的值
Method getname=cls.getDeclaredMethod("getName");//獲取getName方法
System.out.print(getname.invoke(object, null));//設(shè)置調(diào)用getName方法的對象.把值打印到控制臺
  1. Android開發(fā):XML簡介及DOM氛什、SAX莺葫、PULL解析對比
  1. Broadcast 詳解
  • 應(yīng)用無法接受廣播匪凉,如果想通過廣播調(diào)用未啟動過的App,自Android3.1開始捺檬,需要加上
    intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    系統(tǒng)默認(rèn)添加的是:
    intent.addFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES);
  • 注冊/取消注冊應(yīng)用內(nèi)廣播接收器
localBroadcastManager = LocalBroadcastManager.getInstance(context);
localBroadcastManager.registerReceiver(mBroadcastReceiver, intentFilter);

//取消注冊應(yīng)用內(nèi)廣播接收器
 localBroadcastManager.unregisterReceiver(mBroadcastReceiver);

26. Android 動畫總結(jié)

  1. 序列幀動畫:關(guān)鍵詞animation-list再层、AnimationDrawable
  2. 補間動畫
  • xml實現(xiàn)
Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.alpha_anim);
view.startAnimation(animation);
  • Java Code 實現(xiàn)
animation = new RotateAnimation(-deValue, deValue, Animation.RELATIVE_TO_SELF,
                pxValue, Animation.RELATIVE_TO_SELF, pyValue);
view.startAnimation(animation);
  1. 屬性動畫
ObjectAnimator anim = ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f);
        anim.setDuration(1000);
        anim.start();
  • ObjectAnimator 這個類,這個類繼承自ValueAnimator
  • 屬性動畫才是真正的實現(xiàn)了view的移動堡纬,補間動畫對view的移動更像是在不同地方繪制了一個影子聂受,實際的對象還是處于原來的地方
  • 屬性動畫會導(dǎo)致Activity無法釋放而導(dǎo)致內(nèi)存泄漏,而補間動畫卻沒有問題

27. ...

28. 圖片加載框架

Universal-Image-Loader完全解析(一)--- 基本介紹及使用
Universal-Image-Loader完全解析(二)--- 圖片緩存策略詳解
Universal-Image-Loader完全解析(三)---源代碼解讀

29. H5 App開發(fā) WeX5

WeX5文檔中心

30. 數(shù)據(jù)庫安全

WCDB(https://github.com/Tencent/wcdb)是一個高效烤镐、完整蛋济、易用的移動數(shù)據(jù)庫框架,基于SQLCipher炮叶,支持iOS, macOS和Android碗旅。

31. 曲線圖 MPAndroidChart 教程

32. Android中的Apk的加固(加殼)原理解析和實現(xiàn)

參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稼锅,一起剝皮案震驚了整個濱河市吼具,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矩距,老刑警劉巖拗盒,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異剩晴,居然都是意外死亡锣咒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門赞弥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毅整,“玉大人,你說我怎么就攤上這事绽左〉考担” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵拼窥,是天一觀的道長戏蔑。 經(jīng)常有香客問我蹋凝,道長,這世上最難降的妖魔是什么总棵? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任鳍寂,我火速辦了婚禮,結(jié)果婚禮上情龄,老公的妹妹穿的比我還像新娘迄汛。我一直安慰自己,他們只是感情好骤视,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布鞍爱。 她就那樣靜靜地躺著,像睡著了一般专酗。 火紅的嫁衣襯著肌膚如雪睹逃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天祷肯,我揣著相機與錄音沉填,去河邊找鬼。 笑死躬柬,一個胖子當(dāng)著我的面吹牛拜轨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播允青,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼橄碾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了颠锉?” 一聲冷哼從身側(cè)響起法牲,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎琼掠,沒想到半個月后拒垃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡瓷蛙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年悼瓮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艰猬。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡横堡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出冠桃,到底是詐尸還是另有隱情命贴,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站胸蛛,受9級特大地震影響污茵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜葬项,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一驶俊、第九天 我趴在偏房一處隱蔽的房頂上張望压真。 院中可真熱鬧透乾,春花似錦凑耻、人聲如沸压状。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽三椿。三九已至箩兽,卻和暖如春津肛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背汗贫。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工身坐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人落包。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓部蛇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親咐蝇。 傳聞我的和親對象是個殘疾皇子涯鲁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354