示例

一種習慣發表於2017-11-16

#程式設計

##建立新的模組

  1. build檔案的配置,採用和root專案相同配置,需要引用基礎庫,服務庫(不需要服務庫,也可不引入)示例:

         apply plugin: 'com.android.library'
     apply plugin: 'com.jakewharton.butterknife'
    
     android {
         compileSdkVersion rootProject.ext.compileSdkVersion
    
         defaultConfig {
             minSdkVersion rootProject.ext.minSdkVersion
             targetSdkVersion rootProject.ext.targetSdkVersion
         }
         compileOptions {
             targetCompatibility 1.8
             sourceCompatibility 1.8
         }
     }
    
     dependencies {
         implementation fileTree(dir: 'libs', include: ['*.jar'])
         implementation project(':common')
         implementation project(':service')
         annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-SNAPSHOT'
     }複製程式碼
  2. 宣告服務

    • 在service模組中的component包中,建立相模組服務
    • 服務介面需要繼承基類ComponentService
    • 在constant包中的ComponentConstant下,記錄下服務相應的實現類路徑
    • 在IntentParamsConstants類下,宣告Intent帶引數跳轉的key(命名規則:TNTENT-PARAM-模組名稱-業務)
    • 在服務介面中,務必寫清註釋,引數含義及方法業務
  3. 註冊服務到Application,示例:
    Route.getInstance().registerComponent(ComponentConstant.USER);

  4. 其他命名:
    1. 所以命名:包括頁面,佈局,圖片,資原始檔,請在開頭增加模組名稱
    2. 公共資源圖片:請放入common庫中,並已common開頭
    3. 控制元件id命名:模組-控制元件型別-業務 eg:news-tv-list-title
  5. 開發細節

    1. Acticity繼承com.gtmc.common.base.BaseActivity
      • bindLayout()方法設定佈局ID,自動實現初始化
      • widgetClick()實現點選時間
      • initParms()可獲取Intent傳入引數
      • initView()實現控制元件初始化
      • doBusiness()實現業務操作
      • 載入中loading,直接使用loading()方法 取消使用loaded()
      • showToast()展示簡短提示
    2. Fragment繼承同com.gtmc.common.base.BaseFragment
    3. 列表控制元件
      • com.yonyou.common.widget.ListView 整合下拉重新整理及載入更多
      • RecyclerView
      • 請捨棄XListView的使用
    4. 定位
      • com.gtmc.common.utils.Location
        Location.getLocation(mContext, location -> { //do something });
    5. 圖片載入
      • com.yonyou.common.image.ImageLoad
        ImageLoad.loadUrlFitCenter(mContext,view, url);
    6. 日誌系統
      com.yonyou.common.log.Log
    7. Json解析
      • com.yonyou.common.utils.JsonUtils:適用於單獨獲取某個位元組
      • com.yonyou.common.utils.GsonUtils:適用於bean及list轉換
    8. 網路請求

      • com.yonyou.common.net.self.BaseHttp

          new BaseHttp(HttpFactory.HttpType.OKHTTP)
              .post()
              .url(InterfaceNames.GETNEWSINFORMATION)
              .addParam("code", params.code)//是否專屬店0:是   1:不是
              .addParam("lat", params.lat)
              .addParam("lng", params.lon)
              .addParam("pageSize", Constants.PAGE_SIZE)
              .addParam("pageNo", params.pageNo)
              .addParam("cityName", params.cityName)
              .addParam("type", params.type)
              .send(callBack);複製程式碼
    9. 架構
      • mvp模式
      • Model:網路請求,資料提取,提供增刪改查方法
      • Presenter:繫結model及view,刪選處理資料,通知view重新整理
      • View:頁面重新整理樣式,控制元件初始化,事件下發給Presenter
    10. Dialog

      • com.afollestad.materialdialogs.MaterialDialog

          new MaterialDialog.Builder(mContext)
                      .cancelable(false)
                      .progress(true, 0)
                      .progressIndeterminateStyle(false)
                      .content(msg)
                      .build();複製程式碼
  6. 工具外掛
    • GsonFormat json轉為bean的java檔案
    • MVPHelper 生成MVP包
    • Android ButterKnife Zelezny 初始化控制元件
    • 由於元件包都使用的library,所以初始化時,請使用R2來索引ID

##元件互動
例如:首頁模組提供兩個頁面,並且首頁元件調取需要車生活元件的頁面

  1. 首頁提供服務

     public interface HomeService extends ComponentService {
         /**
          * @return 首頁頁面
          */
         Fragment getHomePage();
    
         /**
          * @return 車生活頁面
          */
         Fragment getCarLife();
     }複製程式碼
  2. 車生活提供頁面

         public interface CarLifeService extends ComponentService {
         /**
          * @return 新聞資訊頁面
          */
         Fragment getNewListPage();
    
         /**
          * 進入新聞資訊詳情頁面
          *
          * @param context 上下文
          * @param newsId  新聞ID
          */
         void goNewDetailsPage(Context context, String newsId);
     }複製程式碼
  3. MainActivity中獲取首頁元件, 並載入其頁面

     mHomeService= (HomeService) Route.getInstance().getComponentService(HOME);
     mHomeService.getHomePage();
     mHomeService.getCarLife();    複製程式碼
  4. 車生活頁面獲取

     mCarLifeService = (CarLifeService) Route.getInstance().getComponentService(ComponentConstant.CARLIFE);複製程式碼

##提交規範

  1. 以bug、需求、優化等為一個點做提交準則
  2. 提交已增加字首

     【需求】+【編號】xxxxxxxx
    
     【BUG】+【編號】xxxxxxxx
    
     【優化】+【模組】xxxxxxxx
    
     【資源】+【替換、新增、刪除】xxxxxxxx
    
     【配置】+【升級、新增、刪除】(如第三方庫,build檔案)xxxxxxxx複製程式碼