最近考慮跳槽的小伙伴應(yīng)該很多碰酝,我自己也在做一些知識(shí)點(diǎn)的整理,分享給大家~最新內(nèi)容更新于github/oo1993448102
-
四大組件是什么
</br>均需注冊(cè)使用Activity
-
Service </br>
startService:service生命周期與啟動(dòng)它的組件無關(guān)澎迎,需要顯示銷毀bindService:生命周期與調(diào)用者綁定
ContentProvider
</br>跨應(yīng)用數(shù)據(jù)共享 IPC的一種BroadcastReceiver
</br>靜態(tài)注冊(cè)+動(dòng)態(tài)注冊(cè)(register+unregister)
-
四大組件的生命周期和簡(jiǎn)單用法
</br>Activity:protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy();
Service:</br>
startService():
stopService():
bindService():
unbindService():
startService()
+bindService():
ContentProvider:</br>
ContentProvider只有一個(gè)onCreate()生命周期方法且只會(huì)被調(diào)用一次,當(dāng)其他應(yīng)用通過ContentResolver第一次訪問該ContentProvider時(shí),onCreate()方法將會(huì)被回調(diào)BroadcastReceiver:</br>
動(dòng)態(tài)注冊(cè)與注冊(cè)的context同周期</br>
靜態(tài)注冊(cè) onReceive()后被注銷 -
Activity之間的通信方式
- Intent
- SharedPreference\寫入本地文件
- SQLite 各種orm
- 靜態(tài)變量
- ......
Activity各種情況下的生命周期
http://www.reibang.com/p/e46d449467d5-
橫豎屏切換的時(shí)候夹供,Activity 各種情況下的生命周期
</br>1.不設(shè)置 Activity 的 android:configChanges 時(shí)辑莫,切屏?xí)匦抡{(diào)用各個(gè)生命周期默認(rèn)首先銷毀 當(dāng)前 activity,然后重新加載。2.設(shè)置 Activity android:configChanges="orientation|keyboardHidden|screenSize"時(shí)罩引,切 屏不會(huì)重新調(diào)用各個(gè)生命周期,只會(huì)執(zhí)行
onConfigurationChanged
方法枝笨。直接設(shè)置屏幕方向可以免去這個(gè)問題袁铐。 -
Activity與Fragment之間生命周期比較</br>
Activity上有Dialog的時(shí)候按Home鍵時(shí)的生命周期
</br> 按Home:onPause() onStop()
</br>返回App:onRestart() onStart() onResume()
</br>dialog出現(xiàn)與否不影響生命周期 嘗試時(shí)使用的是AlertDialog兩個(gè)Activity 之間跳轉(zhuǎn)時(shí)必然會(huì)執(zhí)行的是哪幾個(gè)方法?
</br>A跳轉(zhuǎn)B:A的onPause() 若A不可見 onStop()
</br> B的onCreate(),onStart(),onResume()
前臺(tái)切換到后臺(tái)横浑,然后再回到前臺(tái)剔桨,Activity生命周期回調(diào)方法。彈出Dialog徙融,生命值周期回調(diào)方法
</br> 按Home:onPause() onStop()
</br>返回App:onRestart() onStart() onResume()
</br>dialog出現(xiàn)與否不影響生命周期 嘗試時(shí)使用的是AlertDialog-
Activity的四種啟動(dòng)模式對(duì)比
- standard 標(biāo)準(zhǔn)模式洒缀,每次都新建一個(gè)實(shí)例對(duì)象
- singleTop 如果在任務(wù)棧頂發(fā)現(xiàn)了相同的實(shí)例則重用,且調(diào)用原來實(shí)例的onNewIntent()方法欺冀,否則新建并壓入棧頂
- singleTask 如果在任務(wù)棧中發(fā)現(xiàn)了相同的實(shí)例树绩,將其上面的任務(wù)終止并移除,重用該實(shí)例隐轩,且調(diào)用原來實(shí)例的onNewIntent()方法饺饭。否則新建實(shí)例并入棧
- singleInstance 在新任務(wù)棧中開啟,許不同應(yīng)用职车,進(jìn)程線程等共用一個(gè)實(shí)例瘫俊,無論從何應(yīng)用調(diào)用該實(shí)例都重用,且調(diào)用原來實(shí)例的onNewIntent()方法
-
Activity狀態(tài)保存與恢復(fù)
</br>onSaveInstanceState():
- 屏幕旋轉(zhuǎn)重建會(huì)調(diào)用onSaveInstanceState()
- 啟動(dòng)另一個(gè)activity當(dāng)前activity在離開前會(huì)調(diào)用onSaveInstanceState()
- 按Home鍵的情形和啟動(dòng)另一個(gè)activity一樣, 當(dāng)前activity在離開前會(huì)onSaveInstanceState()
onRestoreInstanceState():
- 屏幕旋轉(zhuǎn)重建會(huì)調(diào)用onRestoreInstanceState()
- 啟動(dòng)另一個(gè)activity悴灵,返回時(shí)如果因?yàn)楸幌到y(tǒng)殺死需要重建, 則會(huì)從onCreate()重新開始生命周期, 調(diào)用onRestoreInstanceState()
- 按Home鍵的情形和啟動(dòng)另一個(gè)activity一樣扛芽,用戶再次點(diǎn)擊應(yīng)用圖標(biāo)返回時(shí), 如果重建發(fā)生, 則會(huì)調(diào)用onCreate()和onRestoreInstanceState()
屏幕旋轉(zhuǎn):</br>
</br>Home:
Fragment各種情況下的生命周期
</br>hide show:onHiddenChanged()
</br>viewpager:setUserVisibleHint()
-
Fragment之間傳遞數(shù)據(jù)的方式?
- 拿到fragment對(duì)象积瞒,直接傳參
- 接口回調(diào)
- 事件分發(fā)
- ......
Activity 怎么和Service 綁定川尖?
</br>bindService 方法啟動(dòng)服務(wù), 其它組件可以通過回調(diào)獲取服務(wù)的代理對(duì)象和服務(wù)交互, 而這兩方也進(jìn)行了綁定, 當(dāng)啟動(dòng)方銷毀時(shí), 服務(wù)也會(huì)自動(dòng)進(jìn)行 unBind 操作, 當(dāng)發(fā)現(xiàn)所有綁定都進(jìn)行了 unBind 時(shí)才會(huì)銷毀服務(wù).怎么在Activity中啟動(dòng)自己對(duì)應(yīng)的Service?
</br>在 Activity 中可以通過 startService 和 bindService 方法啟動(dòng) Service赡鲜。-
service和activity怎么進(jìn)行數(shù)據(jù)交互空厌?
- bindService 通過Binder得到Service對(duì)象
- 廣播
- ......
Service的開啟方式
</br>startService && bindService-
請(qǐng)描述一下Service 的生命周期
談?wù)勀銓?duì)ContentProvider的理解
</br>ContentProvider一般為存儲(chǔ)和獲取數(shù)據(jù)提供統(tǒng)一的接口,提供了對(duì)底層數(shù)據(jù)存儲(chǔ)方式的抽象,可以在不同的應(yīng)用程序之間共享數(shù)據(jù)银酬。-
說說ContentProvider嘲更、ContentResolver、ContentObserver 之間的關(guān)系
- ContentProvider:應(yīng)用提供
- ContentResolver:統(tǒng)一管理與不同ContentProvider間的操作揩瞪,通過統(tǒng)一ContentResolver訪問不同ContentProvider
- ContentObserver 內(nèi)容監(jiān)聽器, 可以監(jiān)聽數(shù)據(jù)的改變狀態(tài)
請(qǐng)描述一下廣播BroadcastReceiver的理解
廣播的分類
</br>廣播接受器赋朦,通過action進(jìn)行匹配,任意一個(gè)action匹配則成功。一個(gè)廣播接收器可以接收多個(gè)廣播發(fā)出者發(fā)出的廣播宠哄,一個(gè)廣播發(fā)出者也可以得到多個(gè)廣播接收器的回應(yīng)壹将。
</br>動(dòng)態(tài)注冊(cè),多次注冊(cè)同一個(gè)廣播只有一個(gè)實(shí)例毛嫉,必須顯示unregister
</br>靜態(tài)注冊(cè)诽俯,onReceive后會(huì)自己注銷,所以每次接收時(shí)自動(dòng)生成一個(gè)新的實(shí)例
</br>廣播底層由Binder實(shí)現(xiàn)廣播使用的方式和場(chǎng)景
</br>廣播的發(fā)送者和接收者事先是不需要知道對(duì)方的存在的承粤,這樣帶來的好處便是暴区,系統(tǒng)的各個(gè)組件可以松耦合地組織在一起
</br>監(jiān)聽系統(tǒng)廣播 (區(qū)別EventBus)
</br>進(jìn)程間通信 (區(qū)別EventBus)本地廣播和全局廣播有什么差別?
</br>Broadcast是針對(duì)應(yīng)用間辛臊、應(yīng)用與系統(tǒng)間仙粱、應(yīng)用內(nèi)部進(jìn)行通信的一種方式 廣播底層Binder
</br>LocalBroadcast比較輕量,由handler實(shí)現(xiàn),僅在自己的應(yīng)用內(nèi)發(fā)送接收廣播彻舰,也就是只有自己的應(yīng)用能收到伐割,數(shù)據(jù)更加安全廣播只在這個(gè)程序里,而且效率更高刃唤。BroadcastReceiver隔心,LocalBroadcastReceiver 區(qū)別
</br>LocalBroadcastReceiver不能靜態(tài)注冊(cè),只能采用動(dòng)態(tài)注冊(cè)的方式尚胞。
在發(fā)送和注冊(cè)的時(shí)候采用济炎,LocalBroadcastManager的sendBroadcast方法和registerReceiver方法AlertDialog,popupWindow,DialogFragment區(qū)別
</br>AlertDialog是非阻塞線程的,Popupwindow是阻塞線程的辐真。
</br> DialogFragment fragmentManager會(huì)自動(dòng)管理DialogFragment的生命周期.-
Application 和 Activity 的 Context 對(duì)象的區(qū)別
</br>生命周期長短须尚,使用Activity的Context持有某些靜態(tài)引用會(huì)引起內(nèi)存泄漏
數(shù)字1:?jiǎn)?dòng)Activity在這些類中是可以的灶芝,但是需要?jiǎng)?chuàng)建一個(gè)新的task生兆。一般情況不推薦仍侥。
數(shù)字2:在這些類中去layout inflate是合法的恃慧,但是會(huì)使用系統(tǒng)默認(rèn)的主題樣式睡雇,如果你自定義了某些樣式可能不會(huì)被使用污尉。
數(shù)字3:在receiver為null時(shí)允許坟乾,在4.2或以上的版本中啃沪,用于獲取黏性廣播的當(dāng)前值昧廷。(可以無視)
-
Android屬性動(dòng)畫特性
</br>與視圖動(dòng)畫相對(duì)堪嫂,3.0 API11后出現(xiàn),可用于任何對(duì)象上木柬,在改變視圖的同時(shí)改變屬性皆串,為了兼容可使用開源庫ValueAnimator
</br>ObjectAnimator 如何導(dǎo)入外部數(shù)據(jù)庫?
http://blog.csdn.net/jing__jie/article/details/51602587-
LinearLayout、RelativeLayout眉枕、FrameLayout的特性及對(duì)比恶复,并介紹使用場(chǎng)景
- FrameLayout: 沒有過多的測(cè)量 所有子view默認(rèn)排放左上角
- LinearLayout:線性布局怜森,支持weight,會(huì)測(cè)量?jī)纱?/li>
- RelativeLayout:相對(duì)布局谤牡,兩次測(cè)量
</br>沒有嵌套的情況下副硅,LinearLayout,F(xiàn)rameLayout性能優(yōu)于RelativeLayout翅萤,RelativeLayout的功能比較復(fù)雜恐疲,它的布局過程需要花費(fèi)更多的CPU時(shí)間
布局調(diào)優(yōu)工具
- hierarchy viewer
- lint
- Android Device Monitor (左上方截圖功能的右邊,dump)
談?wù)剬?duì)接口與回調(diào)的理解
</br>可以用于實(shí)現(xiàn)觀察者模式套么、事件監(jiān)聽-
介紹下SurfaceView
1 . View適用于主動(dòng)更新的情況流纹,而SurfaceView則適用于被動(dòng)更新的情況,比如頻繁刷新界面违诗。
2 . View在主線程中對(duì)頁面進(jìn)行刷新,而SurfaceView則開啟一個(gè)子線程來對(duì)頁面進(jìn)行刷新疮蹦。
3 . View在繪圖時(shí)沒有實(shí)現(xiàn)雙緩沖機(jī)制诸迟,SurfaceView在底層機(jī)制中就實(shí)現(xiàn)了雙緩沖機(jī)制。(雙緩沖技術(shù)是游戲開發(fā)中的一個(gè)重要的技術(shù)愕乎。當(dāng)一個(gè)動(dòng)畫爭(zhēng)先顯示時(shí)阵苇,程序又在改變它,前面還沒有顯示完感论,程序又請(qǐng)求重新繪制绅项,這樣屏幕就會(huì)不停地閃爍。而雙緩沖技術(shù)是把要處理的圖片在內(nèi)存中處理好之后比肄,再將其顯示在屏幕上快耿。雙緩沖主要是為了解決 反復(fù)局部刷屏帶來的閃爍。把要畫的東西先畫到一個(gè)內(nèi)存區(qū)域里芳绩,然后整體的一次性畫出來掀亥。)
SurfaceView 詳解 RecyclerView的使用
</br>略-
序列化的作用,以及Android兩種序列化的區(qū)別
</br>序列化:對(duì)象 --> 字節(jié)流 反序列化:字節(jié)流-->對(duì)象- Serializable Java 序列化接口 IO讀寫存儲(chǔ)在硬盤上 利于數(shù)據(jù)持久化
-
Parcelable Android 序列化接口 效率高 在內(nèi)存中讀寫 使用麻煩 (AS有相關(guān)插件 一鍵生成所需方法)
差值器(TimeInterpolator) 估值器(TypeEvaluator)
</br>屬性動(dòng)畫中使用 用于實(shí)現(xiàn)非線性動(dòng)畫
</br> TimeInterpolator:根據(jù)時(shí)間流逝的百分比計(jì)算出當(dāng)前屬性值改變的百分比妥色。
</br> TypeEvaluator:根據(jù)當(dāng)前屬性改變的百分比來計(jì)算改變后的屬性值搪花。
</br>具體可參考扔物線的教程Android中數(shù)據(jù)存儲(chǔ)方式
</br>SOLite SharedPreferences