書接上文剪菱,感謝感謝大佬啟立豆的整理:
https://blog.csdn.net/huangqili1314/article/details/79824830
有個大神自己封裝了Fragment,YoKey大佬的文章:
http://www.reibang.com/p/d9143a92ad94
了解自定義view,感謝huachao1001大佬:
http://www.reibang.com/p/c84693096e41
這部分主要內(nèi)容是Fragment和View(+RecycleView)
(2.1)什么是Fragment
Fragment是碎片辛馆,用于嵌套在Activity之中,是更加輕量化的Activity
(2.2)為什么要用Fragment
為了能夠讓UI加載的時間更短溶弟,反應速度快,占用的資源更少秕噪,在一個Activity中嵌套多個不同功能的Fragment比調(diào)用多個Activity更有效率
(2.3)Fragment與Activity的通信方式
Activity可以使用Intent來進行與Fragment的交互厂置,Intent的本質(zhì)是使用Bundle
Fragment與Activity的通信則需要使用接口回調(diào)的方式,通過調(diào)用接口定義的內(nèi)容來實現(xiàn)通信傳遞到踏。當然Activity也能用接口與Fragment進行交互
(2.4)Fragment各種情況下的生命周期
Fragment的生命周期與Activity相似杠袱,因為是嵌套在Activity中的所以Activity的暫停停止等生命周期方法都會影響到Fragement。唯一區(qū)別的是onCreate與onDestory的方法中
Fragment的onCreate:onAttach--onCreate--onViewCreate--onActivityCreated
Fragment的onDestory:onViewDestory--onDestory--onDeatch
(2.5)Fragment之間傳遞數(shù)據(jù)的方式窝稿?
Fragment之前可以用接口的方式進行數(shù)據(jù)傳遞
也可以使用Fragment.Argument楣富,其內(nèi)核是使用Bundle進行數(shù)據(jù)交互
(2.6)Fragment的add與replace的區(qū)別
Fragment的replace是把要跳轉(zhuǎn)的Fragment初始化一遍,當加入到返回棧時返回Fragment會重新加載這個Fragment
Fragment的add則可以通過hide與show解決這個問題伴榔,但是如果是單純的add的話會覆蓋當前Fragment
(2.7)用Fragment有遇過什么坑嗎纹蝴,怎么解決
(2.8)getFragmentManager,getSupportFragmentManager 踪少,getChildFragmentManager三者之間的區(qū)別
getFragmentManager與getSupportFragmentManager是調(diào)用父容器的管理器塘安,區(qū)別在于getSupprotFragmentManager是用于安卓3.0以下的版本
(2.9)FragmentPagerAdapter與FragmentStatePagerAdapter的區(qū)別與使用場景
FragmentPagerAdapter用于頁面少,但是需要重復使用的情況援奢,因為它能保存Fragment的頁面兼犯,每次調(diào)用不需要重新創(chuàng)建,但是一旦頁面變多內(nèi)存消耗就會非常嚴重,可能會導致閃退切黔。
FragmentStatePagerAdapter用于頁面多砸脊,需要多次重新使用的情況,保存了狀態(tài)但是需要重新的加載內(nèi)容绕娘。
3.自定義組件脓规、動畫
(3.1)描述一下View的繪制流程
View有三個生命周期,onMeasure用于測量元件险领,onLayout用于排列位置,onDraw用于渲染元件
(3.2)說說自定義view的幾個構造函數(shù)
view有四個構造函數(shù)秒紧,分別有不同的用途:
Context绢陌,Attributset,Int DefaultStyleAttr和DefaultStyleResource
(3.3)View 里面的 onSavedInstanceState和onRestoreInstanceState的作用
onSavedInstancedState與onRestoreInstanceState是用于保存頁面狀態(tài)并重新讀取記載熔恢,比如說橫屏豎屏切換就可以用這個保存當前頁面狀態(tài)以至于不用重新加載而丟失進度脐湾。
(3.4)onLayout() 和Layout()的區(qū)別
onLayout是view的一個繪制流程,用于排列元件的位置叙淌,Layout是onLayout的一個子方法秤掌,用于實現(xiàn)子view排列的位置。
(3.5)描述一下getX鹰霍、getRawX闻鉴、getTranslationX
getX是獲取view的x軸位置,getRawX是獲取view到屏幕左邊距的距離茂洒,getTranslationX是獲取view與X軸的偏移量孟岛。
X=getX+getTranslationX
(3.6)Android中的動畫有哪幾類,它們的特點和區(qū)別是什么
安卓中的動畫分為視圖動畫和屬性動畫督勺,視圖動畫又分為補間動畫和幀動畫渠羞。
視圖動畫與屬性動畫最大的區(qū)別就是同樣的動畫,視圖動畫只改變視圖展示給人的內(nèi)容智哀,而實際上屬性不會發(fā)生變化次询;屬性動畫是通過改變view的屬性而發(fā)生視圖的變化。
(3.7)Interpolator和TypeEvaluator的作用
Interpolator是插值器瓷叫,用于決定動畫開始到結(jié)束時一段時間的運動形式屯吊,比如是先快后慢,還是圓周運動等赞辩,有9中模式雌芽,且可以根據(jù)需求自定義。LinearInterpolator就是其中一個模式
TypeEvaluator是估值器辨嗽,用于運動之間具體的數(shù)值內(nèi)容世落,比如說這個時間點的數(shù)值是怎么樣的,那個時間點的數(shù)值是怎么樣的,通過估值器來自定義復雜的運動
TypeEvaluator是屬性動畫才有的內(nèi)容屉佳。
(3.8)請描述一下View事件傳遞分發(fā)機制
dispatchTouchEvent是事件分發(fā)機制入口谷朝,從dispatchTouchEvent到onTouchEvent.
dispatchTouchEvent是從activity發(fā)到viewgroup再發(fā)到view,而onTouchEvent則相反武花。
當一個事件return ture時圆凰,不會向下分發(fā),屬于已消費狀態(tài)体箕。處于false時才會向下分發(fā)专钉。
(3.9)事件分發(fā)中的onTouch 和onTouchEvent 有什么區(qū)別,又該如何使用累铅?
onTouch是監(jiān)聽器的子方法跃须,onTouchEvent是callback的方法,在事件分發(fā)中會從監(jiān)聽器分發(fā)事件到onTouchEvent娃兽。如果在onTouch中return ture菇民,則onTouchEvent則不會收到分發(fā)的事件
(3.10)View和ViewGroup分別有哪些事件分發(fā)相關的回調(diào)方法
View與ViewGroup的分發(fā)回調(diào)方法都很相似,都有depatchTouchEvent和onTouchEvent投储。
區(qū)別的是viewgroup有一個攔截器方法InterceptTouchEvent第练,用于攔截事件然后發(fā)給view。
(3.11)View刷新機制
view的父控件來刷新玛荞,顯示子控件娇掏,當子控件需要刷新時,由父控件進行刷新
建立父子關系則是用view繼承viewgroup或者通過DecorView來建立關系冲泥。
(3.12)RecycleView
參考下面的xhu_ww大佬寫的內(nèi)容:
https://blog.csdn.net/ww897532167/article/details/85868622
還有鴻洋_大佬寫的內(nèi)容:
https://blog.csdn.net/lmj623565791/article/details/45059587
更多的資料全在原地址中驹碍,請多查看原文大佬的總結(jié)及前人的經(jīng)驗
另外如果我說的地方有什么不對的請大家留言,本人非常的菜凡恍,大家的指點能夠讓我更加理解開發(fā)的知識點志秃。請不要含蓄,謝謝
安卓面試的準備一:http://www.reibang.com/p/0a12b61a8f6d
安卓面試的準備二:http://www.reibang.com/p/4459a9b6bba3