寫在前面
隨著Android技術(shù)的不斷發(fā)展和從業(yè)開發(fā)者人群劇增朴下,現(xiàn)在越來越多的公司對Android開發(fā)者要求不斷增高涧郊,如何從公司面試或同行競爭中脫穎而出低飒,這就不得不要求自己不斷學(xué)習(xí)或總結(jié)技術(shù)知識。本系列旨在跟同行分享平時開發(fā)學(xué)習(xí)中的一些技術(shù)及知識夯尽,文中若有不得體或不正確之處冶忱,請聯(lián)系我修改尾菇。
Android 指南
曾經(jīng)因為過時的無關(guān)緊要的一次性博客文章和教程中的信息而感到沮喪嗎?您搜尋了多少次才發(fā)現(xiàn)答案僅存在于2歲的StackOverflow帖子中囚枪?我們認(rèn)為必須有更好的方法派诬。為什么社區(qū)不能一起為Android(或任何平臺)的各個方面創(chuàng)建有用且詳細(xì)的文檔?我們絕對沒有理由再去處理含糊不清的內(nèi)容链沼。
CI做到90%的行覆蓋率默赂,真能發(fā)現(xiàn)BUG嗎
如何優(yōu)雅的評估測試有效性?
為了全自動的進行測試有效性評估括勺,我們做了一個變異機器人缆八,其主要運作是:
- 往被測代碼中寫入一個BUG(即:變異)曲掰;
- 執(zhí)行測試;
- 把測試結(jié)果和無變異時的測試結(jié)果做比對奈辰,判斷是否有新的用例失斃秆;
- 重復(fù)1-3若干次奖恰,每次注入一個不同的Bug吊趾;
- 統(tǒng)計該系統(tǒng)的“測試有效性” 。
GraphQL入門有這一篇就足夠了
在實際工作中往往會有這種情景出現(xiàn):比如說我需要展示一個游戲名的列表瑟啃,可接口卻會把游戲的詳細(xì)玩法论泛,更新時間,創(chuàng)建者等各種各樣的 (無用的) 信息都一同返回蛹屿。
問了后端屁奏,原因大概如下:
原來是為了兼容PC端和移動端用同一套接口
或者在整個頁面,這里需要顯示游戲的標(biāo)題错负,可是別的地方需要顯示游戲玩法啊了袁,避免多次請求我就全部返回咯
或者是因為有時候項目經(jīng)理想要顯示“標(biāo)題+更新時間”,有時候想要點擊標(biāo)題展開游戲玩法等等需求湿颅,所以把游戲相關(guān)的信息都一同返回
簡單說就是:
- 兼容多平臺導(dǎo)致字段冗余
- 一個頁面需要多次調(diào)用 API 聚合數(shù)據(jù)
- 需求經(jīng)常改動導(dǎo)致接口很難為單一接口精簡邏輯
Kotlin 在Android開發(fā)中那些讓人舒適的地方
- 字符模板
- 空安全
- 延遲加載
- 方便易讀的循環(huán)
- 強大易用的迭代器
- 默認(rèn)參數(shù)
- DataClass
- 簡短而強大的標(biāo)準(zhǔn)函數(shù)庫
- 通吃的when(結(jié)合密封類會讓代碼更舒適)
- 擴展
- 簡單的Bundle 快速的Parcelable
關(guān)于 BadTokenException,Toast 可能會出現(xiàn)這個問題
原文
解決Toast崩潰幾點方法
https://www.wanandroid.com/wenda/show/9702
屏蔽連續(xù)點擊的方案有哪些粥诫?
基本的判斷邏輯油航,能想到的有三種,分別是:
1.每次計算最后點擊時間與當(dāng)前時間的間隔怀浆,并判斷是否超過指定時長谊囚。這種方法也是最最常見的;
2.舉例的ButterKnife执赡,它原理也很簡單镰踏,就是:必須要等上一次事件處理完成之后,才接受新的事件(用flag標(biāo)記沙合,事件處理期間忽略多余的事件)奠伪。
3.借助線程池的延遲執(zhí)行機制:每次處理事件之前,根據(jù)一個flag來判斷應(yīng)不應(yīng)該處理該事件首懈,當(dāng)接收了事件之后绊率,把這個flag標(biāo)記為無效。事件處理完成后究履,向線程池提交一個延時執(zhí)行的任務(wù)滤否,這個任務(wù)就是把flag重新標(biāo)記為可用,延時的時長最仑,就是我們指定的間隔時長藐俺。所以炊甲,在指定的間隔時長之內(nèi)到達的事件,也是會被直接忽略掉的欲芹,直到延時任務(wù)被執(zhí)行(flag被重新標(biāo)記可以)后卿啡,才繼續(xù)接收新的事件,周而復(fù)始耀石。這也是Rxjava的throttleFirst操作符的原理牵囤。
4.最簡單粗暴的方案:在BaseActivity中重寫事件分發(fā)函數(shù),判斷Down事件的間隔事件(簡單粗暴滞伟,代碼量少揭鳞,全局防重復(fù)點擊,改動少梆奈,可能存在潛在問題野崇,但是目前沒遇到)
5.aop,分為注解的方式和直接定位亩钟,注解的方式用于自己定義那些地方需要攔截乓梨,直接定位onclick的方式用于全局。
6.j神的rxbinding(好像是基于rxjava操作符的)