今天給大家分享一些初中級的面試專題,比較適合在一些中小廠的開發(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。)
內(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)存之前,我們需要先計算出一個合適的縮放比例,避免不必要的大圖載入。
這個問題真的很不好回答。所以這里先來個算是比較恰當?shù)谋扔鱽硇稳菹滤鼈兊年P(guān)系吧。Activity像一個工匠(控制單元),Window像窗戶(承載模型),View像窗花(顯示視圖)LayoutInflater
像剪刀,Xml
配置像窗花圖紙。
Activity構(gòu)造的時候會初始化一個Window,準確的說是PhoneWindow
。
這個PhoneWindow
有一個“ViewRoot
”,這個“ViewRoot
”是一個View或者說ViewGroup
,是最初始的根視圖。
ViewRoot
通過addView
方法來一個個的添加View。比如TextView
,Button等
WindowManagerService
來接受消息,并且回調(diào)Activity函數(shù)。比如onClickListener
,onKeyDown
等。所以就有了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)線程之間的通信。
ViewGroup
和View
。ViewGroup
包含onInterceptTouchEvent
、dispatchTouchEvent
、onTouchEvent
三個相關(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ā)Acitivity
的onTouchEvent
方法。
7.onInterceptTouchEvent
有兩個作用:1.攔截Down事件的分發(fā)。2.中止Up和Move事件向目標View傳遞,使得目標View所在的ViewGroup
捕獲Up和Move事件。
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)全能類
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);⑥、繪制滾動條。
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)