Android開發(fā)的幾個(gè)小技巧

1.使用Handler在子線程更新UI:有一部分剛?cè)腴T的童鞋會認(rèn)為handler的post(Runnable r)方法是重開一條線程執(zhí)行,其實(shí)只要你點(diǎn)進(jìn)去源碼,就會發(fā)現(xiàn)這個(gè)方法只是調(diào)用了sendMessageDelayed(Message msg, long delayMillis)這個(gè)方法,所以調(diào)用 post方法和你重寫handleMessage(Message msg)這個(gè)方法然后去調(diào)用sendMessage(Message msg)這個(gè)方法其實(shí)是一樣的,不過個(gè)人比較傾向于調(diào)用post方法,因?yàn)楦杏X重寫 handleMessage方法會使代碼閱讀的時(shí)候跳來跳去了,比較不爽(當(dāng)然,這只是個(gè)人喜好)。這個(gè)方法可以這樣用
public void toast(String msg) { handler.post(() -> Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show()); }
在BaseActivity里面添加這個(gè)方法,這樣在需要toast的時(shí)候直接調(diào)用就行了,不用管是否在主線程。

2.假如你使用RxJava,合理使用RxJavaErrorHandler來處理全局錯(cuò)誤,這樣會減少很多重復(fù)代碼的出現(xiàn)。具體使用方法
RxJavaPlugins.getInstance().registerErrorHandler(new RxJavaErrorHandler() { @Override public void handleError(Throwable e) { }) };

3.當(dāng)使用okhttp的時(shí)候,使用Interceptor來處理一些統(tǒng)一的請求處理,如每個(gè)請求的加密和請求的帶一些公用的頭信息等都應(yīng)該Interceptor里面處理,如果需要獲取okhttp post請求的時(shí)候的數(shù)據(jù),可以用以下方法
private static String requestBody2String(okhttp3.Request request) { try { final okhttp3.Request copy = request.newBuilder().build(); final Buffer buffer = new Buffer(); RequestBody requestBody = copy.body(); if (requestBody != null) { requestBody.writeTo(buffer); } return buffer.readUtf8(); } catch (final IOException e) { return null; }}
這個(gè)方法將得到請求的數(shù)據(jù)的json字符串,我們可以將其轉(zhuǎn)成json對象來獲取請求的數(shù)據(jù)。
4.當(dāng)Map的key使int、long、boolean的時(shí)候使用SparseArray、SparseIntArray、LongSparseArray、SparseBooleanArray來代替Map,因?yàn)樵贛ap中,key不能是int、long、boolean這些類型,所以用的時(shí)候只能用Integer、Long、Boolean這些包裝類做key,所以這個(gè)過程涉及到封箱和拆箱,數(shù)據(jù)一多的話,效率自然就明顯會慢了。

5.使用Gson的時(shí)候最好使用@SerializedName("xxx")這個(gè)來注解字段名,而不是讓字段名和數(shù)據(jù)的key保持一致,因?yàn)橛袝r(shí)候服務(wù)器返回的數(shù)據(jù)名可能格式風(fēng)格和客戶端的不一致,而且用注解的話,要是字段名稱改變,直接改一下注解就行了,省去了很多麻煩。

6.還在為每次打包正式版的時(shí)候檢查各種配置是否已經(jīng)切換到正式線而煩惱么,利用好BuildConfig.DEBUG可以解決你的煩惱,再也不用擔(dān)心在打包后發(fā)現(xiàn)接口什么的還是測試線的。

7.使用@StringDef @IntDef來代替枚舉

8.如果你需要?jiǎng)討B(tài)生成一張帶有文字的圖片,普通的做法是getDrawingCache來獲取view上面的bitmap,但是這樣做生成的圖片會受到手機(jī)分辨率的影響,而且還需要在界面上生成view才行,這樣顯然不可取,最理想的做法是用StaticLayout和Canvas來生成,StaticLayout這個(gè)會自動(dòng)排版你的文字,TextView源碼里就是用的這個(gè)。

9.Activity的recreate()方法,重新創(chuàng)建activity,這個(gè)在切換當(dāng)前activity主題或者中英文的時(shí)候很有用。

10.對于能用svg來替換的圖片就盡量用svg,不僅體積小了很多,還可以隨時(shí)手動(dòng)改變大小而不失真。

11.如果你的應(yīng)用經(jīng)常OOM,相信我很多時(shí)候不是圖片太大的問題,而是內(nèi)存泄漏。這個(gè)時(shí)候可以用StrictMode來檢查是哪個(gè)地方出錯(cuò)了
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build());

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,869評論 18 139
  • 一、簡介 OKHttp是一款高效的HTTP客戶端,支持連接同一地址的鏈接共享同一個(gè)socket,通過連接池來減小響...
    Mr丶sorrow閱讀 657評論 0 2
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 11,123評論 6 13
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,098評論 25 708
  • 首先,請看下圖! 不得不說: 這樣的小情趣總是讓我歡欣喜悅的! 這樣的小心意總是讓我覺得溫暖幸福的! 這樣的小心思...
    橙云影閱讀 508評論 0 1