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