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è)會自動排版你的文字阱高,TextView源碼里就是用的這個(gè)赚导。

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

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

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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市昼扛,隨后出現(xiàn)的幾起案子寸齐,更是在濱河造成了極大的恐慌,老刑警劉巖野揪,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件访忿,死亡現(xiàn)場離奇詭異,居然都是意外死亡斯稳,警方通過查閱死者的電腦和手機(jī)海铆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挣惰,“玉大人卧斟,你說我怎么就攤上這事殴边。” “怎么了珍语?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵锤岸,是天一觀的道長。 經(jīng)常有香客問我板乙,道長是偷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任募逞,我火速辦了婚禮蛋铆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘放接。我一直安慰自己刺啦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布纠脾。 她就那樣靜靜地躺著玛瘸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪苟蹈。 梳的紋絲不亂的頭發(fā)上糊渊,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機(jī)與錄音汉操,去河邊找鬼再来。 笑死,一個(gè)胖子當(dāng)著我的面吹牛磷瘤,可吹牛的內(nèi)容都是我干的芒篷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼采缚,長吁一口氣:“原來是場噩夢啊……” “哼针炉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扳抽,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤篡帕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后贸呢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镰烧,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年楞陷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怔鳖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡固蛾,死狀恐怖结执,靈堂內(nèi)的尸體忽然破棺而出度陆,到底是詐尸還是另有隱情,我是刑警寧澤献幔,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布懂傀,位于F島的核電站,受9級特大地震影響蜡感,放射性物質(zhì)發(fā)生泄漏个扰。R本人自食惡果不足惜燃逻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一远舅、第九天 我趴在偏房一處隱蔽的房頂上張望体箕。 院中可真熱鬧,春花似錦杈笔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至朽肥,卻和暖如春禁筏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衡招。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工篱昔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人始腾。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓州刽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親浪箭。 傳聞我的和親對象是個(gè)殘疾皇子穗椅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

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

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