小米開原始檔管理器MiCodeFileExplorer-原始碼研究(0)-初步研究
2011年對著書本Android應用開發揭祕,寫了2個月的HelloWorld。
現在想複習並深入,我沒有耐心再去一點點地敲程式碼了。
4年前自己是個學生,實習,現在有工作,只能業餘時間研究。
這一點是非常不同的。
我希望通過研究別人的“成熟產品”,更好地全面學習。
以目標為導向,具體來說,通過研究別人的一個產品,進而全面掌握,在研究的過程中,
把若干問題都解決了,從而達成“快速進步”的目標。
我們學習Java,學習Android開發,不是為了玩玩而已,也不能緊緊是“感興趣”,更重要的是
解決實際的問題。實際問題通常都是要研發一個完整的產品,至少也是解決某個問題的工具,比如
小米的開原始檔管理器,下載原始碼,搞好Android環境,打包,安裝到我的Coolpad手機上,就可以用了。
它能夠解決Android手機上的檔案管理問題。
我對這個開源產品的評價是9/10,不足之處是,文件太少了,沒啥說明。
在成功打包執行,看到了介面和功能後,我非常喜歡,介面還可以,功能也是完整的。
這種開源專案,我最喜歡了,完全是“成型產品”,“半吊子”的開源產品,研究起來比較折磨人,各種問題。
看了看Github和官方社群,也不怎麼活躍了。
Github專案地址:https://github.com/MiCode/FileExplorer
本地用Eclipse搞好環境,把Github上的程式碼搞進去。
我個人習慣用Android真機測試,速度非常快,從打包到執行,不超過10秒。如果用模擬器,至少要30秒,急死人啊~
Android原始碼,就2個包:
net.micode.fileexplorer 小米寫的程式碼
org.swiftp:一個開源的ftp server,被整合到了小米原始碼中,可以這麼理解
幾十個Java原始檔,都放在1個包裡,好不習慣啊~
在初步讀程式碼後,我優先整理了Java程式碼,分成了好幾個包。
根目錄net.micode.fileexplorer
1.頂級包
FileExplorerTabActivity等各種Activity介面入口檔案,仍然保留在頂級包裡。
2.impl
小米或Android定義的介面的實現類。
3.model
模型檔案,實體檔案,比如FileInfo.java用來表示一個Android物理檔案。
這種程式碼,通常都是比較獨立的。
4.ui
檢視元件,是對Android元件的封裝和補充。
和Activity不同的是,它們不是入口檔案。
5.util
工具類,和模型類類似,它們也相對比較獨立。
比如,FileOperationHelper.java就具體完成了檔案的“增刪改查”。
總的來說,就是把入口、介面、介面元件、模型、工具類等分離,使得你能很快地建立對專案的整體印象。
先整體,後區域性。
要有全域性思維,這是我對自己的要求~
一個常見的問題
Android打包之後,手機上顯示“程式停止執行”,沒有別的提示。
這種問題,通常都是程式出了問題,這個地方Eclipse不夠友好,沒有給出錯誤提示。
最後,通過debug模式,打斷點,定位到了錯誤程式碼,然後增加了try-catch捕捉,最後定位到問題。
有的java檔案,包的路徑變了。
CategoryBar extends View,這個元件是1個介面型別的元件,在xml中有配置。
<net.micode.fileexplorer.ui.CategoryBar
android:id="@+id/category_bar" android:layout_width="fill_parent"
android:layout_height="35px" android:layout_gravity="center"
android:layout_marginBottom="5dip">
</net.micode.fileexplorer.ui.CategoryBar>
個人觀點:如果只會Android,只做自己工作中的那點事,而不關心Java服務端等其他人的工作,
視野會比較狹窄。我心中的“大牛”,“經理人”,“技術負責人”一定是全域性型別的人才。
我認為,全域性型別的人才更加稀缺,全域性型別的人才多是從專一型別的發展過來的。
從專一型別過渡到全域性型別,我覺得更主要是“機遇”。
“機遇”可能是別人給的,如果別人給不了,自己應該通過努力而獲得。
個人努力,需要意識和方向指引~
我是不會認可“努力比方向更重要”和“方向比努力更重要”這種片面的觀點的~
小雷FansUnion-一個正在研究Android的程式設計師
2015年10月25日
湖北-武漢-循禮門
QQ:240370818
微信:FansUnion
我的主要部落格:http://blog.csdn.net/FansUnion
相關文章
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(9)-入口分析原始碼
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(1)-2個模型Model原始碼模型
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(8)-檔案排序工具類FileSortHelper原始碼排序
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(5)-AsyncTask非同步任務原始碼非同步
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(3)-使用最多的工具類Util原始碼
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(2)-2個單例項工具類原始碼單例
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(4)-檔案操作工具類FileOperationHelper原始碼
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(6)-媒體檔案MediaFile和檔案型別MimeUtils原始碼型別
- 小米開原始檔管理器MiCodeFileExplorer-原始碼研究(7)-Favorite收藏管理和SQLite資料庫CRUD原始碼SQLite資料庫
- PHP原始碼研究PHP原始碼
- ICE原始碼研究原始碼
- Free5GC原始碼研究(4) - AUSF研究GC原始碼
- Free5GC原始碼研究(5) - NRF研究GC原始碼
- Free5GC原始碼研究(9) - PCF研究(下)GC原始碼
- 小米開源便籤Notes-原始碼研究(1)-匯出功能整體思路原始碼
- 小米開源便籤Notes-原始碼研究(2)-定時提醒的便籤原始碼
- WebRTC研究 (一) 編譯原始碼Web編譯原始碼
- redux 原始碼研究:中介軟體Redux原始碼
- CJSON原始碼研究筆記JSON原始碼筆記
- JDK執行緒池原始碼研究JDK執行緒原始碼
- Foursquare 原始碼研究之------登入續原始碼
- Nginx原始碼研究之nginx限流模組詳解Nginx原始碼
- 深入研究 Laravel 原始碼第三天Laravel原始碼
- 深入研究 Laravel 原始碼第四天Laravel原始碼
- Netty原始碼研究筆記(4)——EventLoop系列Netty原始碼筆記OOP
- LIVE555原始碼研究之四:MediaServer (一)原始碼Server
- Foursquare 原始碼研究之---------使用者登入原始碼
- COLA的擴充套件性使用和原始碼研究套件原始碼
- HMM滾動訓練擇時研究【附原始碼】HMM原始碼
- 深入研究 Laravel 原始碼第二天Laravel原始碼
- 深入研究 Laravel 原始碼第一天Laravel原始碼
- Struts原始碼研究發現的一個問題原始碼
- 腳踏實地的Netty原始碼研究筆記(1)——開篇Netty原始碼筆記
- Dart中的Stream初步研究Dart
- 【XMPP】Smack原始碼之初步認識Mac原始碼
- 【Swoole原始碼研究】深入理解Swoole協程實現原始碼
- 按照自己的思路研究Spring AOP原始碼【2】Spring原始碼
- 通過分析 JDK 原始碼研究 Hash 儲存機制JDK原始碼