*****
**第一周周考簡答題**
[TOC=6]
# 1、簡述Handler運行原理
Handler運行原理
異步通信準備 => 消息入隊 => 消息循環 => 消息處理
* 異步通信準備
假定是在主線程創建 Handler,則會直接在主線程中創建處理器對象 `Looper`、消息隊列對象 `MessageQueue` 和 Handler 對象。需要注意的是,`Looper` 和 `MessageQueue` 均是屬于其 **創建線程** 的。`Looper` 對象的創建一般通過 `Looper.prepareMainLooper()` 和 `Looper.prepare()` 兩個方法,而創建 `Looper` 對象的同時,將會自動創建 `MessageQueue`,創建好 `MessageQueue` 后,`Looper` 將自動進入消息循環。此時,`Handler` 自動綁定了主線程的 `Looper` 和 `MessageQueue`。
* 消息入隊
工作線程通過 `Handler` 發送消息 `Message` 到消息隊列 `MessageQueue` 中,消息內容一般是 UI 操作。發送消息一般都是通過 `Handler.sendMessage(Message msg)` 和 `Handler.post(Runnabe r)` 兩個方法來進行的。而入隊一般是通過 `MessageQueue.enqueueeMessage(Message msg,long when)` 來處理。
* 消息循環
主要分為「消息出隊」和「消息分發」兩個步驟,`Looper` 會通過循環 **取出** 消息隊列 `MessageQueue` 里面的消息 `Message`,并 **分發** 到創建該消息的處理者 `Handler`。如果消息循環過程中,消息隊列 `MessageQueue` 為空隊列的話,則線程阻塞。
* 消息處理
`Handler` 接收到 `Looper` 發來的消息,開始進行處理。
# 2、簡述Mvc和Mvp的特點及區別
MVC
MVC是Model(模型層)、View(視圖層)、Controller的組成的一種android開發框架,用一種業務邏輯、數據、界面分離的方法組織代碼,將業務邏輯聚集到一個部件里面,在改進和個性格定制界面和用戶交互的同時,不需要修改業務邏輯的代碼。
Model(模型)
是應用程序中處理應用程序數據邏輯的部分,一般用來存儲數據
View(視圖)
是應用程序中的用戶可視界面,也就是用來展示Model層的數據,通常是根據Model的數據來創建
Controller(控制器)
是應用程序中處理用戶交互的部分。通常是從View層讀取操作信息,Controller在經過一系列的邏輯處理后,改變Model的數據狀態,然后Model層將改變之后的數據展示到View層中,Contrller層本身不需要輸出任何東西,和做什么處理,只需要接收請求,決定用哪個模型處理請求,和哪個視圖返回數據。
?
MVC有助于管理復雜的應用程序,可以讓開發人員單獨進行某一層的開發。
優點:
1.耦合性低
視圖層和業務層分離,這樣就允許改變視圖,不用重新編譯模型和控制器的代碼,同樣當業務流程和業務需求改變也只需要改變模型層,應為M、V、C的分離所以很容易改變應用程序的數據層和業務規則。
2.重用性高
允許不同樣式的視圖共享一個模型
3.生命周期成本低
是開發和維護用戶接口的技術含量降低
4.部署快
他可以讓一個開發人員專注于業務邏輯的開發,而另一個開發人員專注于界面的開發。
5.維護性高
因為M、V、C層的分離所以更易于維護和修改
?
缺點:
1.不適合小型和中型規模的應用程序
2.視圖和控制器之間過于緊密的連接
視圖和控制器是相互分離的,但是他們的聯系特別緊密,也就是視圖不能失去控制器,控制器也不能失去視圖。
?
MVP
mvp全稱Model、view、presenter,MVP是從經典的模式MVC演變而來,他們基本思想有想通的地方,MVC的controller層就相當于MVP的presenter層,負責邏輯的處理,Model用來提供數據,View負責顯示。
?
特點:
MVP和MVC最大的區別就是:在MVP中View并不會直接使用Model,他們的之間的所有通信都是通過Presenter層進行,所有的交互都發生的presenter內部,在MVC中View會直接從Model中讀取數據而不是通過Controller.
在MVC里,View是可以直接訪問Model的,從而View里會包含Model信息,不可避免的還要包括一些業務邏輯。導致更改View也是比較困難的。
?
優點:
1、模型與視圖完全分離,我們可以修改視圖而不影響模型
2、可以更高效地使用模型,因為所有的交互都發生在一個地方——Presenter內部
3、我們可以將一個Presenter用于多個視圖,而不需要改變Presenter的邏輯。這個特性非常的有用,因為視圖的變化總是比模型的變化頻繁。
4、如果我們把邏輯放在Presenter中,那么我們就可以脫離用戶接口來測試這些邏輯(單元測試)
?
缺點:
由于對視圖的渲染放在了Presenter中,所以視圖和Presenter的交互會過于頻繁。還有一點需要明白,如果Presenter過多地渲染了視圖,往往會使得它與特定的視圖的聯系過于緊密。一旦視圖需要變更,那么Presenter也需要變更了。比如說,原本用來呈現Html的Presenter現在也需要用于呈現Pdf了,那么視圖很有可能也需要變更。
# 3、簡述基類抽取有什么好處(比如在資訊學過的抽取BaseActivity、BaseFragment基類)
1.簡化了程序,使得程序的累贅部分減少,使程序簡潔。
2.易于派生出其他類。
3.提高代碼通用性。
# 4、git與svn的區別
1.svn是集中式的版本管理工具 git是分布式的版本管理工具。
2.git是每個歷史版本都存儲完整的文件,便于恢復,svn是存儲差異文件,歷史版本不可恢復。(核心)
3.git可離線完成大部分操作,svn則不能。
4.git有著更優雅的分支和合并實現。
5.git有著更強的撤銷修改和修改歷史版本的能力
6.git速度更快,效率更高。
# 5、簡述從0-1項目開發流程
項目立項 =》需求文檔 =》產品原型 =》制定開發計劃 =》 開發人員開發 =》嚴密測試 =》打包上線
- 班規
- 第一單元 Git
- 1.1 Git簡介
- 1.2 Git安裝
- 1.3 版本控制
- 1.4 遠程倉庫
- 1.5 分支管理
- 1.6 Git命令總結
- 1.7 在Android Studio中使用Git
- 第一單元 作業
- 第二單元 項目立項
- 2.1 需求文檔
- 2.2 原型圖
- 2.3 接口文檔
- 2.4 項目實現
- 2.5 制定開發計劃
- 第二單元 作業
- 第三單元 MVP搭建項目框架
- 3.1 代碼架構模式
- 3.2 普通方式寫代碼
- 3.3 使用MVC重構代碼
- 3.4 使用MVP重構代碼
- 3.5 使用接口提高代碼通用性
- 3.6 內存泄漏
- 3.7 使用契約統一管理接口
- 第三單元 作業
- 第四單元 MVP架構優化
- 4.1 MVP基類封裝與泛型應用
- 4.3 BaseActivity的封裝
- 第五單元 Volley網絡框架
- 5.1 Volley網絡框架
- 第六單元 Glide實現圖片異步加載
- 6.1 開始使用
- 6.2 占位符
- 6.3 Glide緩存
- 6.4 GlideGifVideo與色彩模式
- 第七單元 傳統屏幕適配
- 7.1 相對布局
- 7.1 權重
- 7.3 .9Patch
- 7.4 dimens適配
- 7.5 國際化
- 7.6 shape實現自定義樣式
- 7.7 自定義樣式
- 7.8 沉浸式狀態欄
- 第八單元 RecyclerView
- 8.1 RecycleView
- 第九單元 自定義View
- 第十單元 自定義View實戰
- 第十一單元 自定義View進階
- 第二十單元 屬性動畫
- 第十三單元 異常捕獲機制
- 第十四單元 原生登錄、注冊模塊
- 第十五單元 第三方登錄、分享、統計
- 第十六單元 HTML5新特性
- 第十七單元 CSS3新特性
- 第十八單元 WebView與JS交互
- 第一周周考
- 第二周周考
- 第三周周考
- 月考