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

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

2017面試要點

2019-11-09 18:45:25
字體:
供稿:網(wǎng)友

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

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

 Builder模式            alertDialog

 單例模式 inputMethod.getNewInstance

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

觀察者模式  ContentObserver

抽像工廠模式  BaseActivity

2--設(shè)計框架

mvp mvc 

3 消息機制

looper  Handler   

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

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

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

Looper的主要作用保證每一個線程只有一個LOOPER實例,每個LOOPER實例只有一個MESSAGEQUEUE

Handler

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

總結(jié):

Looper.prepare()在本線程中保存一個Looper實例,然后該實例中保存一個MessageQueue對象;因為Looper.prepare()在一個線程中只能調(diào)用一次,所以MessageQueue在一個線程中只會存在一個。

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

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

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

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

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

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

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

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

事件攔截 

ViewGroup會多一個public boolean onInterceptTouchEvent(MotionEvent ev) 方法

如果 onInterceptTouchEvent 返回 true,則表示將事件進行攔截,并將攔截到的事件交由當前 View 的 onTouchEvent 進行處理;

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

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

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

如果返回了 true 則會接收并消費該事件。

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

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

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

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

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

7,JNI相關(guān)

8,動畫原理

9,自定義View


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 临清市| 平乡县| 个旧市| 行唐县| 八宿县| 胶南市| 武功县| 邢台县| 南开区| 吉首市| 炉霍县| 平凉市| 黑河市| 安国市| 顺义区| 阳高县| 庆城县| 信丰县| 仲巴县| 翼城县| 南岸区| 晴隆县| 体育| 阳春市| 扬州市| 宁津县| 商河县| 伊春市| 睢宁县| 武邑县| 汾阳市| 贡山| 西青区| 凤凰县| 高台县| 原平市| 舒城县| 嘉兴市| 昔阳县| 台东市| 奎屯市|