經驗分享

1. 流行技術

  1. 框架:MVP(框架) + Rxjava(響應式編程) + Retrofit(網絡請求封裝)
  2. 經常使用三方庫:
    • Rxbus :事件訂閱管理
    • ButterKnife :view 注入框架(setting 設置 m 開頭)
    • fastjson/Gson :Json 處理工具
    • glide/Fresco :圖片加載組件
    • PictureSelector :圖片選擇器
    • zxing :二維碼掃描
    • Lifecycle :生命週期管理組件
    • tinker :熱修復組件 使用
    • Android-PickerView :多功能選擇框(時間、地點、文件等,支持單選多選)
    • AndPermission :權限管理組件
    • SmartRefreshLayout :上拉加載、下拉刷新
    • material-calendarview :日曆控件
    • SwipeDelMenuLayout : 側滑菜單
    • banner :廣告輪播圖
  3. 經常使用三方工具:
    • 友盟統計、友盟分享、第三方登陸
    • 百度/高德地圖、定位
    • 極光推送
    • 微信支付、支付寶支付
    • Bugly 異常上報和運營統計
    • leakcanary 內存檢測工具
    • ViewServer 可以使用可視化界面顯示工具
  4. 語言:
    • java、kotlin(官方 kotlin 上位,可是 java 短期也不能淘汰)
  5. 其餘:
    • React Native :跨平臺解決方案,但目前屬於踩坑階段。
    • Hybrid :混合開發,Android 的殼 + webview 頁面,可服務器直接更新,可是加載受網絡限制,超級耗流量。
    • dagger2 :依賴注入框架(經過註解注入對象,在預編譯的時期,非反射),上手成本超高。
    • MVVM :也是一種新的架構模式、數據和 view 雙向綁定,但綁定後 view 複用性差。

2.技術棧

  1. 架構的演變:MVC -> MVP、MVVM。html

    咱們前公司架構使用的 MVP ,劃分比較狠一些,就是 activity/fragment 中只有 view 更新,其他的全部操做全在 presenter 中(包擴跳轉、onActivityResult 的處理),中間使用接口定義規範,這樣作的好處就是 view 的頁面能夠直接複製去使用,不同的邏輯所有都在 presenter 中去修改,咱們的同業客戶端(toBC)和旅遊客戶端(toC)在頁面展現上幾乎沒有區別,區別就在於邏輯的處理,能夠根據訂單進行返傭操做。java

  2. 網絡請求、數據解析android

    最開始使用的是 httpurlconnection ,經過流的方式去處理數據,後期有 volley、xUtils,在後來 okhttp 出現,使用的是 OkGo(那時候仍是 MVC 模式)、在後來就是如今的 MVP + Rxjava + Retrofit。ios

    • https 請求的相關知識,證書 證書加密
    • okhttp 的各類攔截器設置 okhttp
  3. 頁面、動畫git

    想要作一個動畫的過程:先把你須要動的 view 先畫出來,而後經過 動畫 讓他動起來,最後在加上手勢判斷,添加邏輯。github

    • 畫出來:
    • 動畫 :屬性動畫(Property Animation)、視圖動畫 (View Animation)。
      • 設置動做:平移、旋轉、縮放、漸變。
      • 設置屬性:時長、重複規律、速度攔截器(勻速、加速、減速、回彈等,也可自定義)
      • 特殊場景:ArgbEvaluator 顏色漸變、自定義 Evaluator(設置起始值、根據動畫完成度,自行定義函數),
      • 複雜場景:使用 AnimatorSet 來同時管理調配多個動畫;

    Android動畫web

    扔物線關於 view 的專欄編程

  4. 優化:頁面、內存json

    • 頁面:過分繪製、邊界佈局。
      • 過分繪製(Overdraw):開發者模式,調試 GPU 過分繪製。
        • image
        • 移除默認的 Window 背景
        • 移除控件中沒必要要的背景
        • 減小布局文件的層級(嵌套)
      • 邊界佈局
        • Hierarchy View 工具
        • image
      • 儘可能讓佈局扁平、減小嵌套、RelativeLayout 代替 LinearLayout、使用 include、merge 等標籤 。
    • 內存:溢出、泄漏。
  5. 安全: 安全這裏接觸的比較少,通常就是代碼混淆,加 360 加固。canvas

  6. 其餘:

    • webview 交互:坑多、不少個性的問題。
    • 頁面適配:文件適配,算好各類分辨率文件,放到資源文件中,經過@dimen/..引用。
    • 新控件: 新控件
  7. 代碼管理:

3.經驗踩坑

  1. java 的值傳遞。引用數據類型和基本數據類型在看成參數傳遞時、要時刻明白傳遞的是地址值,仍是值,對數據進行修改時,會不會改變值。

使用滾輪的三方庫,傳入 list,在回調中根據返回的 position 取值發現 list 數據變了,在他的代碼裏發現他是直接進行了賦值操做,在滾動時對 list 進行了修改致使。

  1. 啓動模式 singleTask 。

在從新開啓頁面的時候,不會走 onCreate 方法,會走 onNewIntent 方法。

  1. 沒什麼特殊狀況的話,在 build.gradle 中最好使用指定版本。

高德地圖 : 使用的是最新版本,恰巧使用 tinker 打補丁包,發現包大了 20 多兆,查找發現由於使用的是 last 版本,自動更新了,最後改回指定版本。

  1. 學會換位思想,能夠減小溝通成本。

開啓你的 activity 須要帶哪些參數,能夠在你本身的類裏面寫開啓的方法,把參數帶上。

  1. 使用重載方法,解決參數數量變化的問題。

分享功能:酒店分享新添加出入店時間,利用重載方法添加參數,省去修改其餘掉用方法。

  1. 儘可能和 ios 端統一變量和邏輯。

這個坑實在是太多了,歷史記錄最開始是本地保存,我和 ios 各寫各的,後來需求開了,須要同步後臺,發現咱們本地數據類不一樣,又作的適配。活動頁面,從列表進入詳情,ios 列表判斷是否過時,我進入詳情後判斷,形成了邏輯不統一。

  1. xml 中 include 相同的文件。

只有最上面的佈局纔會被注入到 activity 中,下面的佈局須要手動 findviewbyid。作懸停頁面的時候,經過 include 引入兩個相同的頁面。

  1. getTop()的方法獲取的高度是相對於父佈局。

郵輪的詳情頁面,添加產品下線時,展現推薦產品功能,佈局進行嵌套(爲了顯示和隱藏),高度對不上,懸停錯誤。

  1. popupwindow 嵌套 edittext時,沒法使用粘貼功能,系統bug。

處理:換成 dialogfragment 代替。彈窗查詢手機號。

  1. popupwindow 中 edittext 沒法獲取焦點。

在 new popupwindow 的時候在構造時,選擇爲 true。

  1. view 實例化,最好使用LayoutInflater.from(mContext).inflate(getResId(), parent, false)

參數介紹

  1. 使用 NestedScrollView 代替 Scrollview ,防止滑動衝突,以及嵌套 RecyclerView 的顯示不全。
  2. 引導頁面點擊或者滑動進入,取消點擊按鈕。

setOnTouchListener 重寫 onTouch 方法,進行手勢就判斷攔截。

  1. 機票日曆選擇頁面,點擊自動定位到中間位置。

從新設置 LayoutManager 中 smoothScroller 的 calculateDtToFit 方法實現。

  1. 7.0 的新特性的 apk 下載後的升級安裝。

7.0 之後禁止向你的應用外公開。 Android7.0新特性,及Android N適配

  1. TextView 和 SpannableStringBuilder。

    有一些樣式、間距等徹底可使用 TextView 和 SpannableStringBuilder 去實現。 好比:設置行間距、行數、超過指定字數以 "..." 結尾、設置摺疊、字體居中。 只用一個 TextView 實現字體大小不一樣、顏色不一樣、加粗、刪除線等。

其實你不懂:Android之TextView 不經常使用的幾個方法

【Android】強大的SpannableStringBuilder

  1. RecyclerView 複用的問題。

item 的狀態、圖片錯亂這個比較常見,好解決。

酒店的房間列表,屬於列表套列表,最開始數據所有返回,加載列表,沒有問題。 後期列表的子列表改爲單獨接口訪問,這就須要更新操做了,問題也就來了,列表的item notifyDataSetChanged 會產生新的 item 對象,新的 item 沒有綁定 adapter ,刷新無效,可是個人子 item 顯示隱藏還必需要刷新,就只能手動更新,不使用 notifyDataSetChanged。

  1. view.gone 和 invisiable 的區別。

在 RelativeLayout 中,兩個 view 有依賴關係,當一個 view gone 時,另外一個 view 就找不到依賴,位置就亂了。

  1. onWindowFocusChanged 方法裏面去獲取高度。

須要測量 view 的時候,onCreate 獲取不到,頁面尚未繪製完。

  1. notifydatechange 是在子線程進行更新,須要時間。

notifydatechange 以後直接調用滾動方法,可能位置會有問題。ScrollView 嵌套 RecyclerView 時,更新後,要經過 ScrollView 定位。

  1. ScrollView 滑動過快回調會不及時。

作一些懸停漸變的操做時,要在上下邊界從新設置位置或漸變度。懸停和漸變。

  1. webview 和 h5 同步瀏覽器測試須要設置代碼。
//用於同步瀏覽器調試
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    WebView.setWebContentsDebuggingEnabled(true);
}
複製代碼
  1. popupwindow 裏若是使用的 listview 添加分割線時,在高度計算時,要添加上。
  2. textview 設置 drawable,更換圖片。
Drawable drawable = getResources().getDrawable(R.drawable.signdown);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
複製代碼
  1. 頁面添加懸浮按鈕時,最好單獨寫 view 非侵入的 xml,在使用時,直接 new 出來,add 進頁面。不然需求改動,你就哭了。
  2. webview 交互 h5 時的數據類,須要包裝。
var jsonStr = JSON.stringify(str);
複製代碼

在接收的時候須要去除 "/"。 27. 預覽 pdf 跳轉瀏覽器,Android webview 沒有 ios 的強大。 28. RecyclerView 的 adapter 若是有 if 必定要不全 else 不然會發生錯亂。 29. 簡單的列表建議使用 LinearLayout addview 使用。 31. 機票列表的數據和經停數據不在一個藉口中。

列表一個接口,經停數據須要再次訪問,訪問後使用 map 存儲,減小請求時間。

  1. 使用代碼主動去調用控件的點擊事件(模擬人手去觸摸控件)

performClick方法

  1. TelephonyManager 使用時,第一次會走無任何狀態的回調,TelephonyManager.CALL_STATE_IDLE:

添加 一個 變量,第一次走邏輯。

  1. realm 與 新大陸打印之間的 so 衝突。so 的過濾。
  2. 屏蔽 home 按鍵引起的 Window type can not be changed after the window is added 問題
  3. dialogfragment 顯示彈窗 中間有padding link
  4. edittext 設置整數和小數 android:inputType="numberDecimal|number"
  5. android rsa 與 java rsa 加密不一樣 link

4.規範

  1. Android 開發規範 :Android 開發手冊
  2. 阿里巴巴 java 插件 :java 開發規約插件
  3. 版本控制規範:使用 GIT FLOW 管理開發流程

5.小技巧

  1. tips:
    • ctrl + p :查看方法的傳入參數
    • ctrl + e :查看最近打開的文件
    • F2:快速跳轉到報錯的代碼
    • alt + 數字鍵 :快速打開對應數字的側邊欄
    • ctrl/ctrl + shift + r :當前頁面/整個項目查找替換
    • ctrl/ctrl + shift + f :當前頁面/整個項目搜索
    • ctrl + shift + f :生成成員變量。
    • shift + f6 :重命名。
    • alt + m :提取方法(我改鍵了)
    • alt + i : generate 的彈窗
  2. 代碼模版 :相似新建 activity 能夠直接將 MVP。 所須要的類全都生成出來,不用一個一個新建。
  3. 阿里巴巴矢量圖庫
  4. tinypng圖片壓縮

6.其餘

  1. 文案排版:中文文案排版指北
  2. 在學習技術以外,最好能在掌握其餘的知識,好比:產品、運營
  3. 給你們推薦幾本書:
    • 社科類:《影響力》、《烏合之衆》(心理學)、《啓示錄》(產品)、《原則》、《窮查理寶典》
    • 技術類:《24 種設計模式介紹與 6 大設計原則》、《重構》、《大話設計模式》、
相關文章
相關標籤/搜索