Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 《app研發錄》第一章 重構,夜未眠筆記,ipd重構產品研發

《app研發錄》第一章 重構,夜未眠筆記,ipd重構產品研發

編輯:關於android開發

《app研發錄》第一章 重構,夜未眠筆記,ipd重構產品研發


1.1 重新規劃android的項目結構
    重新規劃android的目錄結構分兩步:
1.建立AndroidLib類庫,將與業務無關的邏輯轉移到AndroidLib。
acitivity存放的是跟業務無關的Activity基類
cache包存放的是緩存數據和圖片相關的處理
net包存放的是網絡底層封裝
ui存放自定義控件
utils存放各種與業務無關的公共方法
    2.將主項目中的類分門別類的進行劃分,放置各種包中。
activity 按模塊繼續劃分,將不同模塊的activity劃分到不同的包下 adapter放適配器 db 存放SQLite相關邏輯 engine存放業務相關的類 entity所以的實體存放 interfaces 接口 命名以I作為開頭 listener 基於Listener的接口 命名以On作為開頭 ui自定義控件 utils 所有的公共方法   這樣劃分的目的:
1.每個文件單獨一個類,不要有嵌套
2.將acitivity劃分後,可以迅速定位具體的頁面。開發人員都只負責自己的那個包,開發邊界很清晰。
  1.2 為Activity定義新的生命周期
有一個原則,單一職責:一個類或方法,只做一件事。
  觀察Activity的onCreate發現:
這段代碼包括三段邏輯:
1.初始化變量 initVariables
2.加載布局,初始化空間,為控件掛上事件方法。initView
3.獲取數據 loadData
    可以在AndroidLib這個類庫中的BaseActivity重寫onCreate方法。
  然後去繼承它實現它的三個方法。   1.3 統一事件編程模型
  根據上面的 btn_login.setOnClickListener(this);       @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btn_login:
            //執行點擊後的操作
            break;
        }
    }   每次還會使用R.id 所以比較推崇: btn_login.setOnClickListener(this);
        
        btn_login.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //執行點擊後的操作
            }
        });     1.4 實體化編程
  fastJSON :   https://github.com/alibaba/fastjson GSON:          https://github.com/google/gson   fastJSON添加之後: 1:加了符號Annotation的實體屬性,使用就崩潰 2:有泛型屬性,使用就崩潰   調試的時候沒事打包簽名的時候就會出問題。
  -keepattributes Signatue     //避免混淆泛型
-keepattributes *Annotation*     //不混淆注解
    在頁面跳轉使用的實體: 1.調用請求的Json數據 2.從上一個頁面傳過來。   1.5 adapter模板:
  public abstract class ListBaseAdapter<T> extends BaseAdapter{
    
    protected Context mContext;
    protected List<T> mValues;
    protected LayoutInflater mInflater;
    
    public ListBaseAdapter(Context context, List<T> values) {
        mContext = context;
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mValues = values;
    }
    
    public Context getContext() {
        return mContext;
    }

    @Override
    public int getCount() {
        if (mValues != null)
            return mValues.size();
        return 0;
    }

    @Override
    public T getItem(int position) {
        if (position == getCount() - 1 || mValues == null) {
            return null;
        }
        return mValues.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return getItemView(convertView, position);
    }
    protected abstract View getItemView(View convertView, int position);
    
    public void update(List<T> values) {
        mValues = values;
        notifyDataSetInvalidated();
        notifyDataSetChanged();
    }
}     1.6類型的安全轉換
      /**
     * 將字符轉換成數字
     * @param value
     * @param defaultValue
     * @return
     */
    public final static int convertToInt(String value,int defaultValue){
        if(StringUtils.isNullOrEmpty(value)){
            return defaultValue;
        }
        try {
            return Integer.valueOf(value.toString());
        } catch (Exception e) {
            try {
                return Double.valueOf(value.toString()).intValue();
            } catch (Exception e1) {
                return defaultValue;
            }
        }
    }   /**
     * 判斷是否為空
     *  
     * @param text
     * @return
     */
    public static boolean isNullOrEmpty(String text) {
        if (text == null || "".equals(text.trim()) || text.trim().length() == 0
                || "null".equals(text.trim())) {
            return true;
        } else {
            return false;
        }
    }

   

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved