開發一個Android應用之前,應該做點什麼?

開發一個Android應用之前,應該考慮點什麼?

本文原創,轉載請註明出處。
歡迎關注我的 簡書 ,關注我的專題 Android Class 我會長期堅持爲大家收錄簡書上高質量的Android相關博文。

開心一刻

寫在前面:

昨天參加了秋百萬大大組織的北京GDG活動,收穫頗豐。又跟幾個有寫作習慣的朋友建立了一個“神祕組織”,每兩週爲一個週期,每人都會產出一篇原創的文章,互相校驗和探討,意在督促組員之間學習和分享開源技術。而簡書上的平臺就交給我維護了,不出意外,幾天之內大家就可以看到我們的主頁和第一期成員的文章啦,敬請期待~

前幾天接手了一個老員工遺留下來的代碼,別提多痛苦了,甚至有了讓我推倒重寫的衝動,很多地方的設計問題頗多,老大也快無法忍受了。。。上學的時候寫一篇作文,要想好主題立意和分段,解數學題的時候也得在草稿紙上梳理清楚邏輯之後再下筆。其實開發一個Android也應是如此,不做準備,埋頭苦寫,最後會導致問題頗多。所以本文會根據網絡上優秀內容和我實際的開發經驗討論總結一下,開發一個Android應用之前,都應該做哪些準備

編碼規範

編碼規範的問題是我最先想強調的,因爲我接手的項目命名就極其混亂,甚至在一個類中的命名都沒有統一化(生無可戀臉)。代碼可能不是你自己一個人寫,保證代碼可讀性是非常必要的。而規範存在的意義就是淡化每個人的習慣而達到統一。不多說,下面就介紹Android的編碼規範

  • 除了註釋,代碼中不出現中文
  • 每個類寫上必要的註釋,類的說明,作者,聯繫方式
  • 方法加上必要的註釋說明,方便以後維護

包管理

  • base:存放基礎類的包,裏面的類以Base爲前綴,例如BaseActivity;
  • activity:存放activity的包,每個activity命名以Activity結尾,例如MainActivity;
  • fragment:存放fragment的包,每個fragment命名以Fragment結尾,例如ChatFragment;
  • receiver:存放receiver的包;
  • service:存放service的包;
  • adapter:存放adapter的包,每個adapter命名以Adapter結尾,例如EventItemAdapter;
  • common:存放一些公共常量,例如後端接口、SharedPreferenceKey、IntentExtra等;
  • utils:存放工具類的包,比如常見的工具類:LogUtils、DateUtils;
  • entity:存放實體類的包;
  • widget:存放自定義View的包;

以上是一些常見的包,但不侷限於此,視項目的具體情況而定。

命名

大駝峯命名(UpperCamelCase):每個單詞的第一個字母都大寫。

小駝峯命名(lowerCamelCase):除第一個單詞以外,每一個單詞的第一個字母大寫。

命名的基本原則:

  • 儘可能地使用統一的命名規範;
  • 不使用漢語拼音;
  • 除了常見的英文縮寫,儘量少地使用縮寫;

包命名

  • 小寫字母,參見上文包管理;
  • 連續的單詞直接連接起來,不使用下劃線;

Java類命名

  • 大駝峯命名 UserListAdapter;
  • 除常見的縮寫單詞以外,不使用縮寫,縮寫的單詞每個字母都大寫 RequesURLList;
  • 公共的工具類建議以Utils、Manager爲後綴,如LogUtils;
  • 接口命名遵循以上原則,以able或ible爲後綴;

變量命名

  • 成員變量命名
    • 小駝峯命名;
    • 不推薦使用谷歌的前面加m的編碼風格(如果使用團隊中使用m,則統一使用);
  • 常量命名
    • 單詞每個字母均大寫;
    • 單詞之間下劃線連接;
  • 控件變量命名
    • 小駝峯命名;
    • 建議使用 控件縮寫+邏輯名稱 格式,例如 tvPostTitle、etUserName;
    • 對應的控件的id的命名控件縮寫_邏輯名稱,單詞均小寫,用下劃線連接,例如:tv_post_title、
    • et_user_name;
  • 常見的控件縮寫如下:
    控件 縮寫
    Linearlayout ll
    RelativeLayout rl
    TextView tv
    EditText et
    Button btn
    ImageView iv
    CheckBox chb
    ListView lv
    GridView gv
    RadioButton rb

方法命名

  • 小駝峯命名;
  • Getter和Setter方法,推薦使用自動生成的,寫起來也很方便。注意,bool類型的變量Getter方法寫成isTrue這種;
  • 方法名應當保證見名知義的原則,儘量不使用or或者and,遵循“do one thing”原則;

佈局文件命名

  • activity、fragment佈局文件名以對應的類別名稱爲前綴,邏輯名稱放在其後,以下劃線連接,例如activity_home、fragment_chat_list,方便查找;
  • ListView、GridView的item佈局文件建議以list_item、gird_item爲前綴,加上對應的邏輯名稱,例如
    list_item_post、grid_item_photo;
  • Dialog的佈局文件以dialog爲前綴,邏輯名稱放在其後,下劃線連接,例如dialog_warnning;
    包含項佈局命名以include開頭,在加上對應的邏輯名稱,例如include_foot
  • 控件的id命名參見控件變量命名;

資源命名

  • 圖標資源以ic爲前綴,例如ic_chat,指聊天圖標;
  • 背景圖片以bg爲前綴,例如bg_login,指的是登錄頁的背景圖;
  • 按鈕圖片以btn爲前綴,例如btn_login,指的是登錄按鈕的圖片,不過這隻有一種狀態,需要加上狀態的可以在後面添加,例如btn_login_pressed,表示登錄按鈕按下的圖片;
  • 當使用shape和selector文件爲背景或者按鈕時,命名參照以上說明;

項目架構

項目框架
一個好的項目架構可以降低項目的複雜性,並且易擴展、易維護,耦合低,結構清晰,功能內聚。
MVCMVPMVVM還有一些設計模式,結合你app的業務,自行選擇一個最合適的一條路走到黑,建議不要“混搭”。

開源框架

開源框架的選擇分兩大類,一是權威性毫無爭議,放心選擇的這類幫助我們快速開發的,比如:

  • 網絡 Retrofit + OkHttp+ RxJava、Volley、android-async-http
  • 依賴注入 Dagger2、ButterKnife、RoboGuice
  • 事件總線 otto、EventBus
  • 圖片加載 Fresco、Glide、Picasso
  • 數據庫 GreenDao、Ormlite、LitePal
  • 日誌輸出 logger、LogUtils
  • 當然不能忘了Google提供的兼容support全家桶

還有一類框架雖然不是毫無爭議,但是也能極大節省我們的時間,提升開發效率,對於這類項目,要在Github上長期淘寶了。找那種star很多,issues解決很快,長期維護的項目,這種坑會比較少。

代碼細節

抽取基類
即使目前你沒有需要,也一定要抽取一個BaseActivity和BaseFragment,因爲早晚會用到,切記!
比如:

public abstract class BaseActivity extends Activity{

    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        init();
    }

    private void init() {
        setContentView(R.layout.activity_main);
        initView();
        initData();
        initListener();
    }

    /**
     * 初始化佈局
     */
    protected abstract void initView();

    /**
     * 初始化數據
     */
    protected  abstract void initData();

    /**
     * 初始化偵聽
     */
    protected abstract void initListener();

}

BaseFragment也同理,隨着業務的增加和抽象,基類會繼續擴展。其實不僅僅是BaseActivityBaseFragment,如果你一個業務模塊中有很多相似和相同的邏輯,也可以抽取一個BaseXXX這是非常好的一個習慣。

還有一些建議,不做展開,大家請自行搜索:

  • Android Studio上好用的插件
  • selector
  • 圖片的.9處理
  • Resources xml文件中,記得用註釋分割每個類用到的資源,建議不共用
  • 慎用static關鍵字
  • 定期code review,不斷代碼重構

性能優化

推薦一個我曾經寫過的總結:

Android性能優化總結

寫在後面:

本文做了一個初步總結,未來會慢慢擴展和完善,如果有遺漏,大家可以補充~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章