国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

2017面試要點(diǎn)

2019-11-09 17:44:15
字體:
供稿:網(wǎng)友

最近要面試,整理一些經(jīng)常問到用到的知識(shí)點(diǎn)

1設(shè)計(jì)模式                        應(yīng)用場景

 Builder模式            alertDialog

 單例模式 inputMethod.getNewInstance

         適配器模式  各類ListView RecycleView GridView 的適配器

觀察者模式  ContentObserver

抽像工廠模式  BaseActivity

2--設(shè)計(jì)框架

mvp mvc 

3 消息機(jī)制

looper  Handler   

Looper負(fù)責(zé)創(chuàng)建一個(gè)MessageQueue.并且不斷從Messagequeue中讀取Message

Message則是由Handler創(chuàng)建。

Looper 包含PRepare()  loop()二個(gè)方法  前者負(fù)責(zé)創(chuàng)建新的looper 后者負(fù)責(zé)從當(dāng)前l(fā)ooper獲得消息隊(duì)列.取message然后Dispatch

Looper的主要作用保證每一個(gè)線程只有一個(gè)LOOPER實(shí)例,每個(gè)LOOPER實(shí)例只有一個(gè)MESSAGEQUEUE

Handler

Handler 創(chuàng)建的時(shí)候通過Loop.myLooper();去獲得當(dāng)前線程的實(shí)例,從而獲得當(dāng)前messageQueue實(shí)例。

總結(jié):

Looper.prepare()在本線程中保存一個(gè)Looper實(shí)例,然后該實(shí)例中保存一個(gè)MessageQueue對象;因?yàn)長ooper.prepare()在一個(gè)線程中只能調(diào)用一次,所以MessageQueue在一個(gè)線程中只會(huì)存在一個(gè)。

2、Looper.loop()會(huì)讓當(dāng)前線程進(jìn)入一個(gè)無限循環(huán),不端從MessageQueue的實(shí)例中讀取消息,然后回調(diào)msg.target.dispatchMessage(msg)方法。

3、Handler的構(gòu)造方法,會(huì)首先得到當(dāng)前線程中保存的Looper實(shí)例,進(jìn)而與Looper實(shí)例中的MessageQueue想關(guān)聯(lián)。

4、Handler的sendMessage方法,會(huì)給msg的target賦值為handler自身,然后加入MessageQueue中。

5、在構(gòu)造Handler實(shí)例時(shí),我們會(huì)重寫handleMessage方法,也就是msg.target.dispatchMessage(msg)最終調(diào)用的方法。

4,Touch事件分發(fā)機(jī)制

View(Button) DispatchtoucEvent -- onTouch -- TouchEvent-- onClick

一個(gè)TouchEvent形成后由Acitivity DispatchTouchEvent向下分發(fā) 傳給ViewGroup 傳向View;遇到某一級 return true的情況則到此為止,不再分發(fā)。

return false 會(huì)傳給Activity或上一級ViewGroup的OnTouchEvent去處理

事件攔截 

ViewGroup會(huì)多一個(gè)public boolean onInterceptTouchEvent(MotionEvent ev) 方法

如果 onInterceptTouchEvent 返回 true,則表示將事件進(jìn)行攔截,并將攔截到的事件交由當(dāng)前 View 的 onTouchEvent 進(jìn)行處理;

如果 onInterceptTouchEvent 返回 false,則表示將事件放行,當(dāng)前 View 上的事件會(huì)被傳遞到子 View 上,再由子 View 的 dispatchTouchEvent 來開始這個(gè)事件的分發(fā);

事件響應(yīng):public boolean onTouchEvent(MotionEvent ev)  在 dispatchTouchEvent 返回 super.dispatchTouchEvent(ev) 并且 onInterceptTouchEvent 返回 true 或返回 super.onInterceptTouchEvent(ev) 的情況下 onTouchEvent 會(huì)被調(diào)用。onTouchEvent 的事件響應(yīng)邏輯如下:

如果事件傳遞到當(dāng)前 View 的 onTouchEvent 方法,而該方法返回了 false,那么這個(gè)事件會(huì)從當(dāng)前 View 向上傳遞,并且都是由上層 View 的 onTouchEvent 來接收,如果傳遞到上面的 onTouchEvent 也返回 false,這個(gè)事件就會(huì)“消失”,而且接收不到下一次事件。

如果返回了 true 則會(huì)接收并消費(fèi)該事件。

如果返回 super.onTouchEvent(ev) 默認(rèn)處理事件的邏輯和返回 false 時(shí)相同。

5,內(nèi)存泄露,內(nèi)存溢出

垃圾回收器無法回收原本應(yīng)該被回收的對象,這個(gè)對象就引發(fā)了內(nèi)存泄露。內(nèi)存泄露的危害: (1)過多的內(nèi)存泄露最終會(huì)導(dǎo)致內(nèi)存溢出(OOM)(2)內(nèi)存泄露導(dǎo)致可用內(nèi)存不足,會(huì)觸發(fā)頻繁GC,不管是Android2.2以前的單線程GC還是現(xiàn)在的CMS和G1,都有一部分的操作會(huì)導(dǎo)致用戶線程停止(就是所謂的Stop the world),從而導(dǎo)致UI卡頓。

Android為每個(gè)進(jìn)程設(shè)置Dalvik Heap Size閾值,這個(gè)閾值在不同的設(shè)備上會(huì)因?yàn)镽AM大小不同而各有差異。如果APP想要分配的內(nèi)存超過這個(gè)閾值,就會(huì)發(fā)生OOM。

ActivityManager.getMemoryClass()可以查詢當(dāng)前APP的Heap Size閾值,單位是MB。

7,JNI相關(guān)

8,動(dòng)畫原理

9,自定義View


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 北海市| 额济纳旗| 昌图县| 布尔津县| 沁水县| 武胜县| 吉林省| 梓潼县| 额尔古纳市| 兴国县| 茂名市| 扶绥县| 吴旗县| 来安县| 安阳县| 宿松县| 漾濞| 大竹县| 曲沃县| 陆川县| 志丹县| 佳木斯市| 湘西| 汶上县| 梁平县| 南皮县| 通许县| 仁寿县| 个旧市| 瑞丽市| 郎溪县| 睢宁县| 土默特右旗| 婺源县| 竹溪县| 河津市| 大厂| 泰安市| 乐山市| 兴文县| 电白县|