成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如果你在中小廠,這些你一定要搞懂

今天給大家分享一些初中級的面試專題,比較適合在一些中小廠的開發(fā)者,跟隨我一起來看看吧。

成都網(wǎng)站建設(shè)、做網(wǎng)站中從網(wǎng)站色彩、結(jié)構(gòu)布局、欄目設(shè)置、關(guān)鍵詞群組等細微處著手,突出企業(yè)的產(chǎn)品/服務/品牌,幫助企業(yè)鎖定精準用戶,提高在線咨詢和轉(zhuǎn)化,使成都網(wǎng)站營銷成為有效果、有回報的無錫營銷推廣。創(chuàng)新互聯(lián)公司專業(yè)成都網(wǎng)站建設(shè)10余年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。

同樣,關(guān)于下列PDF里所有的知識,絕大部分有配套的視頻.代碼.源碼.資料和筆記,對于我整理的核心PDF筆記感興趣的
https://github.com/xiangjiana/androids

(更多完整項目下載。未完待續(xù)。源碼。圖文知識后續(xù)上傳github。)

如果你在中小廠,這些你一定要搞懂

初級面試專題(中小廠)

1、導致內(nèi)存泄露的原因有哪些?

內(nèi)存泄露的根本原因:長生命周期的對象持有短生命周期的對象。短周期對象就無法及時釋放。

靜態(tài)內(nèi)部類非靜態(tài)內(nèi)部類的區(qū)別(Handler?引起的內(nèi)存泄漏。)

靜態(tài)集合類引起內(nèi)存泄露

單例模式引起的內(nèi)存泄漏。

解決:Context是ApplicationContext,由于ApplicationContext的生命周期是和app一致的,不會導致內(nèi)存泄漏

注冊/反注冊未成對使用引起的內(nèi)存泄漏。

集合對象沒有及時清理引起的內(nèi)存泄漏。通常會把一些對象裝入到集合中,當不使用的時候一定要記得及時清理集合,讓相關(guān)對象不再被引用。

減少內(nèi)存對象的占用

  • ArrayMap/SparseArray代替hashmap

  • 避免在android里面使用Enum

  • 減少bitmap的內(nèi)存占用

    • inSampleSize:縮放比例,在把圖片載入內(nèi)存之前,我們需要先計算出一個合適的縮放比例,避免不必要的大圖載入。

    • decode format:解碼格式,選擇ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差異。
  • 減少資源圖片的大小,過大的圖片可以考慮分段加載
    2、理解Activity,View,Window三者關(guān)系

這個問題真的很不好回答。所以這里先來個算是比較恰當?shù)谋扔鱽硇稳菹滤鼈兊年P(guān)系吧。Activity像一個工匠(控制單元),Window像窗戶(承載模型),View像窗花(顯示視圖)LayoutInflater像剪刀,Xml配置像窗花圖紙。

  • Activity構(gòu)造的時候會初始化一個Window,準確的說是PhoneWindow

  • 這個PhoneWindow有一個“ViewRoot”,這個“ViewRoot”是一個View或者說ViewGroup,是最初始的根視圖。

  • ViewRoot通過addView方法來一個個的添加View。比如TextView,Button等

  • 這些View的事件監(jiān)聽,是由WindowManagerService來接受消息,并且回調(diào)Activity函數(shù)。比如onClickListeneronKeyDown等。
3、Handler的原理

所以就有了handler,它的作用就是實現(xiàn)線程之間的通信。

handler整個流程中,主要有四個對象,handler,Message,MessageQueue,Looper。當應用創(chuàng)建的時候,就會在主線程中創(chuàng)建handler對象,

我們通過要傳送的消息保存到Message中,handler通過調(diào)用sendMessage方法將Message發(fā)送到MessageQueue中,Looper對象就會不斷的調(diào)用loop()方法

不斷的從MessageQueue中取出Message交給handler進行處理。從而實現(xiàn)線程之間的通信。

4、View,ViewGroup事件分發(fā)
  1. Touch事件分發(fā)中只有兩個主角:ViewGroupView。ViewGroup包含onInterceptTouchEvent、dispatchTouchEventonTouchEvent三個相關(guān)事件。View包含dispatchTouchEvent、onTouchEvent兩個相關(guān)事件。其中ViewGroup又繼承于View。

2.ViewGroup和View組成了一個樹狀結(jié)構(gòu),根節(jié)點為Activity內(nèi)部包含的一個ViwGroup。

3.觸摸事件由Action_Down、Action_Move、Aciton_UP組成,其中一次完整的觸摸事件中,Down和Up都只有一個,Move有若干個,可以為0個。

4.當Acitivty接收到Touch事件時,將遍歷子View進行Down事件的分發(fā)。ViewGroup的遍歷可以看成是遞歸的。分發(fā)的目的是為了找到真正要處理本次完整觸摸事件的View,這個View會在onTouchuEvent結(jié)果返回true。

5.當某個子View返回true時,會中止Down事件的分發(fā),同時在ViewGroup中記錄該子View。接下去的Move和Up事件將由該子View直接進行處理。

由于子View是保存在ViewGroup中的,多層ViewGroup的節(jié)點結(jié)構(gòu)時,上級ViewGroup保存的會是真實處理事件的View所在的ViewGroup對象:如ViewGroup0-ViewGroup1-TextView的結(jié)構(gòu)中,TextView返回了true,它將被保存在ViewGroup1中,而ViewGroup1也會返回true,被保存在ViewGroup0中。當Move和UP事件來時,會先從ViewGroup0傳遞至ViewGroup1,再由ViewGroup1傳遞至TextView。

6.當ViewGroup中所有子View都不捕獲Down事件時,將觸發(fā)ViewGroup自身的onTouch事件。觸發(fā)的方式是調(diào)用super.dispatchTouchEvent函數(shù),即父類View的dispatchTouchEvent方法。在所有子View都不處理的情況下,觸發(fā)AcitivityonTouchEvent方法。

7.onInterceptTouchEvent有兩個作用:1.攔截Down事件的分發(fā)。2.中止Up和Move事件向目標View傳遞,使得目標View所在的ViewGroup捕獲Up和Move事件。

5、onNewIntent()什么時候調(diào)用?(singleTask)
6、mvc?和?mvp mvvm

如果你在中小廠,這些你一定要搞懂
MCP.MVVM項目實戰(zhàn)代碼.筆記

1.mvc:數(shù)據(jù)、View、Activity,View將操作反饋給Activity,Activitiy去獲取數(shù)據(jù),數(shù)據(jù)通過觀察者模式刷新給View。循環(huán)依賴Activity,很難單元測試View和Model耦合嚴重

2.mvp:數(shù)據(jù)、View、Presenter,View將操作給Presenter,Presenter去獲取數(shù)據(jù),數(shù)據(jù)獲取好了返回給Presenter,Presenter去刷新View。PV,PM雙向依賴

3.mvvm:數(shù)據(jù)、View、ViewModel,View將操作給ViewModel,ViewModel去獲取數(shù)據(jù),數(shù)據(jù)和界面綁定了,數(shù)據(jù)更新界面更新。

  • viewModel的業(yè)務邏輯可以單獨拿來測試

  • 一個view?對應一個?viewModel?業(yè)務邏輯可以分離,不會出現(xiàn)全能類

  • 數(shù)據(jù)和界面綁定了,不用寫垃圾代碼,但是復用起來不舒服
7、自定義控件

View的繪制流程:OnMeasure()——>OnLayout()——>OnDraw()

第一步:OnMeasure():測量視圖大小。從頂層父View到子View遞歸調(diào)用measure方法,measure方法又回調(diào)OnMeasure。
第二步:OnLayout():確定View位置,進行頁面布局。從頂層父View向子View的遞歸調(diào)用view.layout方法的過程,即父View根據(jù)上一步measure子View所得到的布局大小和布局參數(shù),將子View放在合適的位置上。?
第三步:OnDraw():繪制視圖。ViewRoot創(chuàng)建一個Canvas對象,然后調(diào)用OnDraw()。
六個步驟:
①、繪制視圖的背景;
②、保存畫布的圖層(Layer);
③、繪制View的內(nèi)容;
④、繪制View子視圖,如果沒有就不用;
⑤、還原圖層(Layer);⑥、繪制滾動條。

8、Serializable和Parcelable?的區(qū)別

P?消耗內(nèi)存小
網(wǎng)絡傳輸用S?程序內(nèi)使用P
S將數(shù)據(jù)持久化方便
S使用了反射 容易觸發(fā)垃圾回收 比較慢

文章標題:如果你在中小廠,這些你一定要搞懂
分享地址:http://jinyejixie.com/article6/gcecog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化、網(wǎng)站維護、關(guān)鍵詞優(yōu)化微信公眾號、小程序開發(fā)網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司
高邮市| 雷山县| 葵青区| 峨边| 土默特左旗| 林芝县| 定西市| 海丰县| 鹤壁市| 芷江| 南部县| 满洲里市| 尖扎县| 沛县| 华宁县| 葵青区| 锡林郭勒盟| 金昌市| 南和县| 黎川县| 江油市| 白河县| 札达县| 靖远县| 手游| 大石桥市| 大足县| 崇仁县| 漳州市| 穆棱市| 涟水县| 特克斯县| 城固县| 平江县| 偃师市| 蛟河市| 冀州市| 喀什市| 开平市| 富锦市| 开江县|