Android Lint掃描優(yōu)化(一)

一.使用Lint

工具欄 -> Analyze -> Inspect Code

彈出窗的Custom scope可以選擇對(duì)哪一指定部分進(jìn)行掃描桑李,whole project是整個(gè)項(xiàng)目,不太建議每次都掃描整個(gè)項(xiàng)目贬蛙,因?yàn)樘臅r(shí)了鹰晨。

二.觀(guān)察Lint的結(jié)果

初次掃描之后忧侧,會(huì)彈出一個(gè)顯示掃描結(jié)果的窗口年枕,比如我的掃描結(jié)果:


1萬(wàn)7個(gè)警告,尼瑪我寫(xiě)的代碼就這么糟糕嗎,我這感覺(jué)要改到下個(gè)月都改不完啊揉抵,看到這么多的警告亡容,先不要慌,首先要做的就是刪除項(xiàng)目重新做冤今,開(kāi)玩笑的闺兢,先找下資料看看每一欄目錄表示什么。

1. Accessibility意思是便利性的意思

具體什么意思我也不知道辟汰,然后點(diǎn)開(kāi)發(fā)現(xiàn)都是這個(gè)提示



這些都是針對(duì)ImageView和ImageButton的列敲,說(shuō)我缺少contentDescription這個(gè)參數(shù),這屬性是啥我也不知道帖汞,以前一直沒(méi)用過(guò),然后百度查看看凑术。


瞬間覺(jué)得很屌翩蘸,這些都是我平時(shí)開(kāi)發(fā)沒(méi)有考慮過(guò)的,雖然這個(gè)警告對(duì)我來(lái)說(shuō)影響不大淮逊,要用的話(huà)可以按教程來(lái)做催首,這里我就暫時(shí)先搞空的。

而這個(gè)也驗(yàn)證了“Accessibility”這個(gè)的含義泄鹏,主要是要你提供一些遍歷的警告郎任。

優(yōu)化優(yōu)先級(jí)很低,我覺(jué)得可以直接忽略

2. Correctness 這是正確性的意思

也看看是哪里有問(wèn)題才能推出這個(gè)目錄具體的分類(lèi)备籽。點(diǎn)開(kāi)后發(fā)現(xiàn)有很多欄



其實(shí)如果寫(xiě)android比較多的話(huà)舶治,就算英語(yǔ)不太好也大概知道是什么意思,比如第一個(gè)就是說(shuō)Class沒(méi)被注冊(cè)到manifest中车猬,那這個(gè)Class基本肯定是一個(gè)Activity

我發(fā)現(xiàn)是我的一個(gè)基類(lèi)沒(méi)注冊(cè)霉猛,不知道為什么這會(huì)提示這個(gè)BUG。這個(gè)先不管珠闰,看我第2條惜浅,它報(bào)這個(gè)警告



這個(gè)就有意思了,雖然目前沒(méi)出錯(cuò)伏嗜,但是按照它的說(shuō)法去做肯定更安全坛悉,這也體現(xiàn)Lint的優(yōu)化的好處,我們肯定是盡量消除警告的好承绸,雖然有些警告并不影響運(yùn)行的結(jié)果裸影,但是消除這些警告肯定會(huì)更為安全些。

然后改了一下其它的八酒,發(fā)現(xiàn)這個(gè)目錄就是說(shuō)你用的某個(gè)地方不太好空民,比如說(shuō)版本舊,比如說(shuō)多寫(xiě)了某些內(nèi)容,比如說(shuō)讓你在設(shè)置字體大小時(shí)用sp不要用dp界轩,它就會(huì)給你一些合理的修改方法画饥,其實(shí)我并沒(méi)有全部改完,就改了一半左右浊猾。

3.Internationalization 意思是國(guó)際化

我想它應(yīng)該是一個(gè)標(biāo)準(zhǔn)化的意思抖甘。



我這里有3個(gè),第一個(gè)其實(shí)就是我在xml中直接寫(xiě)中文葫慎,它建議我用@String寫(xiě)到資源文件中衔彻。老鐵,道理我都懂偷办,我這378個(gè)地方艰额,我要改要畫(huà)時(shí)間啊,所以先把這個(gè)優(yōu)先級(jí)降低椒涯,再看看第二個(gè)柄沮。

第二個(gè)Overlapping items in RelativeLayout意思是RelativeLayout的Item重疊,我結(jié)合了一下我的代碼废岂,它的意思就是說(shuō)RelativeLayout中的元素可以會(huì)相互覆蓋祖搓,比如說(shuō)我這樣的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:padding="10dp"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:id="@+id/tv_time"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:id="@+id/tv_order_num"
        android:layout_alignParentRight="true"
        />
</RelativeLayout>

一個(gè)在左一個(gè)在右,但是如果右邊的TextView太長(zhǎng)湖苞,會(huì)出現(xiàn)覆蓋左邊TextView拯欧。這個(gè)確實(shí)是一個(gè)寫(xiě)布局時(shí)大意的地方。
要防止這個(gè)事情發(fā)生财骨,需要在第二個(gè)TextView加上

android:layout_toRightOf="@+id/tv_time"
android:gravity="right"

第三個(gè)是TextView連接顯示的問(wèn)題镐作,就是我這樣寫(xiě)

tvMoney.setText("¥" + data.act.discountAmount);

是不建議的,而是建議使用占位符蚓再,那什么是占位符呢滑肉,就是用@String文件來(lái)做,比如我這樣

<string name="fetch_again">重新獲取(%1$d秒)</string>

總的來(lái)說(shuō)摘仅,這個(gè)目錄就是建議你使用一些國(guó)際化的規(guī)范寫(xiě)法靶庙。總的來(lái)說(shuō)優(yōu)先級(jí)也不是很高娃属,但是有時(shí)間的話(huà)還是建議改下六荒,畢竟按規(guī)范寫(xiě)準(zhǔn)沒(méi)錯(cuò)。

4.Performance 性能的意思

可想而知這條目錄的重要性和優(yōu)先級(jí)肯定高矾端。點(diǎn)開(kāi)目錄


我有差不多300個(gè)性能問(wèn)題掏击,看著都想哭。
點(diǎn)開(kāi)每個(gè)目錄秩铆,它有會(huì)有詳細(xì)的英文解釋?zhuān)苋菀拙湍芸炊屯瞥瞿睦飭?wèn)題砚亭,看不懂百度翻譯灯变。
比如說(shuō)第一條



它大概是說(shuō)我這個(gè) layout_width用0dp好過(guò)用match_parent,因?yàn)槲矣昧薼ayout_weight屬性捅膘。說(shuō)真的我不知道影響多大添祸,但這里說(shuō)了是性能相關(guān),那么最好還是改了寻仗。

再比如說(shuō)第二條刃泌,是因?yàn)槲以谧远xView的繪制過(guò)程中創(chuàng)建對(duì)象,所以它建議我不要這么做署尤,確實(shí)耙替,因?yàn)檫@些方法會(huì)經(jīng)常被調(diào)用,在這些方法里面做創(chuàng)建對(duì)象的操作會(huì)創(chuàng)建出來(lái)一大堆對(duì)象曹体,于是我把

lineViews = new ArrayList();

改成

lineViews.clear();

并把創(chuàng)建對(duì)象的操作寫(xiě)在外面俗扇,這個(gè)確實(shí)是我之前沒(méi)那么認(rèn)真注意到的一個(gè)問(wèn)題。
其它的就不一一說(shuō)了箕别,那些解釋都說(shuō)得很清楚狐援,主要是想說(shuō)明這個(gè)Performance 的優(yōu)先級(jí)很高,最好把里邊涉及到的問(wèn)題都改了究孕。

然后我就再說(shuō)說(shuō)一些我這邊會(huì)影響性能的細(xì)節(jié)
(1)嵌套權(quán)重會(huì)影響性能


(2)設(shè)置背景時(shí)要注意overdraw,意思就是說(shuō)這個(gè)的上一層背景已經(jīng)設(shè)了這個(gè)背景爹凹,而這個(gè)也設(shè)相同的厨诸,就造成了overdraw

(3)注意一下這項(xiàng),是關(guān)于Context內(nèi)存泄漏的


(4)未使用到的資源會(huì)影響性能禾酱,不過(guò)我不建議馬上刪除微酬,我覺(jué)得在發(fā)布前刪除比較好。


(5)無(wú)用布局不一定要無(wú)腦刪



這個(gè)是說(shuō)沒(méi)用到的布局颤陶,但是有個(gè)地方很奇怪颗管,就是我用了ScrollView , 雖然當(dāng)前內(nèi)容夠一屏幕,我是為了防止不同機(jī)型而設(shè)置的滓走,它也提示我這是多余的布局垦江。

我目前碰到的就這些,不要看我性能這塊有300個(gè)警告搅方,其實(shí)有200多個(gè)都是多余的資源文件比吭,真正嚴(yán)重的就十幾二十個(gè)。

5.Security 安全的意思

我看了一下姨涡,警告的都是我拷貝的一些網(wǎng)上的代碼衩藤,暫時(shí)看不懂是什么問(wèn)題。

6.Usability 復(fù)用/適用 的意思

第一條是說(shuō)我的Button很多相同涛漂,可以用style赏表,這個(gè)優(yōu)先級(jí)并不是這么高,第二個(gè)說(shuō)我input類(lèi)型和提示有誤,這個(gè)我倒覺(jué)得不用管瓢剿,第三個(gè)不是我寫(xiě)的代碼逢慌,我不背鍋,第四個(gè)說(shuō)我Text的尺寸太小了


說(shuō)尺寸最好不要小于12sp跋选,我只能說(shuō)涕癣,太良心了,哥們你這都要警告我前标。

7.issues

有Lint標(biāo)簽的都看完了坠韩,發(fā)現(xiàn)還有很多是issues 標(biāo)簽的,我隨便抽了一些出來(lái)看炼列,也沒(méi)看出有什么只搁。

8.Imports

這個(gè)很容易理解,就是你在類(lèi)中導(dǎo)入沒(méi)有用到的資源俭尖,這個(gè)我覺(jué)得還是要處理一下好氢惋。

這里有個(gè)技巧,點(diǎn)擊目錄右鍵稽犁,選擇Optimize Imports就能快速把整個(gè)項(xiàng)目多余的Imports給刪除焰望。


9.Declaration redundancy

這個(gè)是聲明冗余的意思∫押ィ可以按照它的說(shuō)明去更改熊赖,優(yōu)先級(jí)的話(huà)我覺(jué)得一般,不是很高虑椎。

10.Spelling

這個(gè)是拼寫(xiě)震鹉,比較有意思的東西,你的命名不規(guī)范的話(huà)在單詞下面都會(huì)畫(huà)個(gè)灰色的波浪線(xiàn)捆姜。然而完全沒(méi)影響传趾,除了對(duì)強(qiáng)迫癥的來(lái)說(shuō)。

11.probable bugs

這個(gè)就是說(shuō)你的代碼中可能會(huì)出現(xiàn)BUG的地方泥技,我認(rèn)為這個(gè)目錄的優(yōu)先級(jí)很高浆兰,做好按照它的說(shuō)明進(jìn)行更改,比如我這個(gè)零抬。


它就說(shuō)我調(diào)用這個(gè)方法可能會(huì)產(chǎn)生空指針镊讼,所以我就必須在這塊地方加個(gè)判斷。

就暫時(shí)看這么多吧平夜,我覺(jué)得重點(diǎn)就是Performance和Correctness 蝶棋,然后開(kāi)發(fā)時(shí)要注意一下國(guó)際化和拼寫(xiě)的問(wèn)題,可能之前開(kāi)發(fā)沒(méi)太注意加上項(xiàng)目功能挺多忽妒,導(dǎo)致現(xiàn)在警告好多玩裙。

但是在使用過(guò)程中也發(fā)現(xiàn)Lint的功能挺強(qiáng)大的兼贸,能反應(yīng)出很多代碼中的問(wèn)題,有助于開(kāi)發(fā)吃溅,而且也不是很難溶诞,建議可以抽點(diǎn)時(shí)間優(yōu)化下代碼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末决侈,一起剝皮案震驚了整個(gè)濱河市螺垢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赖歌,老刑警劉巖枉圃,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異庐冯,居然都是意外死亡孽亲,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)展父,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)返劲,“玉大人,你說(shuō)我怎么就攤上這事栖茉±郝蹋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵吕漂,是天一觀(guān)的道長(zhǎng)搔耕。 經(jīng)常有香客問(wèn)我,道長(zhǎng)痰娱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任菩收,我火速辦了婚禮梨睁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘娜饵。我一直安慰自己坡贺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布箱舞。 她就那樣靜靜地躺著遍坟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晴股。 梳的紋絲不亂的頭發(fā)上愿伴,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音电湘,去河邊找鬼隔节。 笑死鹅经,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的怎诫。 我是一名探鬼主播瘾晃,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼幻妓!你這毒婦竟也來(lái)了蹦误?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤肉津,失蹤者是張志新(化名)和其女友劉穎强胰,沒(méi)想到半個(gè)月后枝恋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吹截,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抑进,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年廊散,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挡育。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片义桂。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡篙贸,死狀恐怖君珠,靈堂內(nèi)的尸體忽然破棺而出肾筐,到底是詐尸還是另有隱情哆料,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布吗铐,位于F島的核電站东亦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏唬渗。R本人自食惡果不足惜典阵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望镊逝。 院中可真熱鬧壮啊,春花似錦、人聲如沸撑蒜。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)座菠。三九已至狸眼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浴滴,已是汗流浹背拓萌。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留升略,地道東北人司志。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓甜紫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親骂远。 傳聞我的和親對(duì)象是個(gè)殘疾皇子囚霸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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