Lint常見的問題及解決方案

快速定位該網(wǎng)頁上你要找的問題及解決方案:Ctrl+F 搜索你的問題

通用的解決方案:

在java代碼中同樣可以忽略(ignore) Lint 警告:@SuppressLint(“忽略的警告名稱”),如:Handler泄漏(@SuppressLint(“HandlerLeak”))要是你不清楚要忽略的警告具體是什么名字,那就直接忽略 all蹂午,當然是當前類/方法/對象:
@SuppressLint("all")
在XML中:tools:ignore="忽略"

1、[Accessibility] Missing contentDescription attribute on image

image.png
這個問題一般都出在:Image相關(guān)控件如ImageView和ImageButton都會出現(xiàn)這個警告贯底!
  • 原因:這些控件一般都是有圖片的耘眨,而圖片含有多種物體和顏色傅物,但是考慮到我們小伙伴有少數(shù)色弱的小伙伴怖现,可能無法分別圖片的物體蹂随,所以希望我們加上contentDescription這個屬性十嘿。至于這個屬性是做什么的呢?這個屬性是對這個控件的圖片進行描述的岳锁,比如可能Android的一些程序可以用聲音告訴使用者這個圖片畫的是什么绩衷,他們讀的就是你contentDescription的內(nèi)容。
解決方案1:如:加上>>>android:contentDescription="@string/pay_vip">>>這個屬性就好
解決方案2:(忽略這個提示)
image.png

你可別告訴我你在一個一個的加<ぢ省?妊唷!
直接右擊這個問題外層的包乒躺,把所有需要加的屬性的控件全部加上


image.png

2招盲、To get local formatting use getDateInstance(), getDateTimeInstance(), or getTimeInstance(), or use new SimpleDateFormat(String template, Locale locale) with for example Locale.US for ASCII dates.

image.png
這個問題一般都出在:new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
  • 原因:它會采取一個額外的參數(shù) - 區(qū)域設置要使用。 如果你想確保輸出為機器可讀以一致的方式(總是看起來是一樣的嘉冒,不管用戶的實際區(qū)域設置的)曹货,你可以選擇的 Locale.CHINA,如果你不計較手機的可讀性讳推,您可以明確地設置為使用Locale.getDefault().
解決方案1:用2參數(shù)的構(gòu)造方法:new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.getDefault());

3顶籽、This transaction should be completed with a commit() call

image.png
  • 原因:Android Lint只看到您已經(jīng)將一些片段事務調(diào)用鏈接在一起,所以會出現(xiàn)這個問題银觅。
解決方案1:你可以改成鏈式寫法礼饱,也可以直接忽略。(@SuppressLint("CommitTransaction"))

4究驴、Consider using apply() instead; commit writes its data to persistent storage immediately, whereas apply will handle it in the background

image.png
  • 翻譯:考慮使用apply(),而不是提交立即將其數(shù)據(jù)寫入持久存儲,而應用在后臺會處理它
解決方案1:用apply()替換掉commit()

(apply沒有返回值而commit返回boolean表明修改是否提交成功2.apply是將修改數(shù)據(jù)原子提交到內(nèi)存, 而后異步真正提交到硬件磁盤, 而commit是同步的提交到硬件磁盤3.apply方法不會提示任何失敗的提示
apply的效率高一些镊绪,如果沒有必要確認是否提交成功建議使用apply。)


5洒忧、This LinearLayout should use android:layout_height="wrap_content"

image.png
  • 翻譯:這LinearLayout應該使用android:layout_height = " wrap_content”
解決方案1:改成wrap_content即可

6蝴韭、This <FrameLayout> can be replaced with a <merge> tag

image.png
這個問題一般都出在:FrameLayout或者當一個布局包含另一個時
  • 理由:<merge/>標簽在UI的結(jié)構(gòu)優(yōu)化中起著非常重要的作用,它可以刪減多余的層級跑慕,優(yōu)化UI万皿。<merge/>多用于替換FrameLayout或者當一個布局包含另一個時,<merge/>標簽消除視圖層次結(jié)構(gòu)中多余的視圖組核行。例如你的主布局文件是垂直布局牢硅,引入了一個垂直布局的include,這是如果include布局使用的LinearLayout就沒意義了芝雪,使用的話反而減慢你的UI表現(xiàn)减余。這時可以使用<merge/>標簽優(yōu)化
解決方案:根據(jù)提示將布局替換成<merge></merge>

7、This Handler class should be static or leaks might occur (anonymous android.os.Handler)

image.png
  • 原因:Handler 類應該應該為static類型惩系,否則有可能造成泄露位岔。在程序消息隊列中排隊的消息保持了對目標Handler類的應用如筛。如果Handler是個內(nèi)部類,那 么它也會保持它所在的外部類的引用抒抬。為了避免泄露這個外部類杨刨,應該將Handler聲明為static嵌套類,并且使用對外部類的弱應用
解決方案:給Handler加上static屬性擦剑,如果你需要在Handler中調(diào)用外部Activity的方法妖胀,就讓Handler持有一個對Activity的WeakReference,這樣就不會造成Activity的泄漏惠勒。
在java代碼中同樣可以忽略(ignore) Lint 警告:@SuppressLint(“忽略的警告名稱”)赚抡,如:Handler泄漏(@SuppressLint(“HandlerLeak”))要是你不清楚要忽略的警告具體是什么名字,那就直接忽略 all纠屋,當然是當前類/方法/對象:
@SuppressLint("all")
示例代碼:
image.png

參考文章:
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1106/1922.html


8涂臣、Use new SparseIntArray(...) instead for better performance

image.png
  • 原因:SparseArray(是一個android提供的一個工具類)單純從字面上來理解,SparseArray指的是稀疏數(shù)組(Sparse array) 售担,所謂稀疏數(shù)組就是數(shù)組中大部分的內(nèi)容值都未被使用(或都為零)赁遗,在數(shù)組中僅有少部分的空間使用。因此造成內(nèi)存空間的浪費灼舍,為了節(jié)省內(nèi)存空間吼和,并且不影響數(shù)組中原有的內(nèi)容值涨薪,我們可以采用一種壓縮的方式來表示稀疏數(shù)組的內(nèi)容
解決方案:根據(jù)提示替換成SparseArray
image.png

參考文章:https://liuzhichao.com/p/832.html
替換示例:

image.png


9骑素、Use a layout_height of 0dp instead of fill_parent for better performance

image.png
這個問題一般都出在:外層是LinearLayout布局中
  • 原因:一個線性布局,中間的子布局設置了Android:layout_weight="1.0"屬性刚夺,會將剩余空間填充滿献丑,這時候子布局的android:layout_width="fill_parent"就沒有用了,應該改為android:layout_width="0dp"
解決方案:改為android:layout_width="0dp"

10侠姑、Consider adding android:layout_marginStart="12dp" to better support right-to-left layouts與 When you define paddingLeft you should probably also define paddingRight for right-to-left symmetry

(關(guān)于上下左右相關(guān)的問題解決方法一樣创橄,如:android:paddingEnd="12dp)

  • 原因:這個警報是因為android加入了新的對從右到左閱讀順序的支持要求程序使用end start來代替left right這個start就是當前手機設置的閱讀順序的開始端 比如我們的閱讀習慣就是從左到右 那start就是left 反之就是right 第二個的意思是:當你定義paddingLeft你也應該定義paddingRight從右到左的對稱
解決方案:添加相應缺少的屬性 (或者直接加忽略屬性)

11、Set android:baselineAligned="false" on this element for better performance

  • 原因:如果LinearLayout被用于嵌套的layout空間計算莽红,它的android:baselineAligned屬性應該設置成false妥畏,以加速layout計算
解決方案:添加:android:baselineAligned="false"

12、This Cursor should be freed up after use with #close()

image.png
  • 原因:Cursor使用完后記得釋放掉
解決方案:添加:cursor.close();

13安吁、Nested weights are bad for performance

image.png
  • 原因:在布局進行嵌套使用時醉蚁,父布局與子布局都使用了android:layout_weight,但不是必須使用時鬼店,便會出現(xiàn)如題所示的警告信息
解決方案:去掉一個不需要的android:layout_weight屬性

14网棍、This tag and its children can be replaced by one <TextView/> and a compound drawable

image.png
  • 原因:可以直接給TextView加圖片,不需要用的ImageView這個控件「局牵可以使用android:drawableLeft.滥玷、android:drawableRight等屬性指定
解決方案:根據(jù)圖片的位置添加相應屬性

15氏身、possible overdraw:root element paints background @color/a9a9a9_3f with a theme that also paints a background(inferred theme is @style/apptheme)

image.png
  • 原因:部分區(qū)域過度繪制,如:布局的background的顏色與theme的background重復了
解決方案:我沒改惑畴,因為改了之后好像布局有變動...

(參考文章:http://www.reibang.com/p/145fc61011cd


16蛋欣、This LinearLayout layout or its LinearLayout parent is useless; transfer the background attribute to the other view

image.png
  • 原因:這LinearLayout LinearLayout布局或其父母是無用的,就是你布局可以刪除一個沒用的效果是一樣的如贷。
解決方案:刪除一個不需要的布局就好

17豁状、Typo: In word 'xyz'(拼寫錯誤,可以不管)

image.png

18倒得、android:singleLine is deprecated: Use maxLines="1" instead

image.png
  • 翻譯:棄用android:單行模式:使用maxLines =“1”
解決方案:將報錯的改成android:maxLines="1"

錯誤的:


image.png

正確的:


image.png

19泻红、incomplete translation(國際化文字適配)

解決方案1:(如果你不打算適配國際化)直接全部忽略掉
解決方案2:如果你需要國家化你就添加多國語言

打開編輯器:


image.png

選擇適配的語言:


image.png

設置:


image.png

20、Must be one of: Context.POWER_SERVICE, Context.WINDOW_SERVICE, Context.LAYOUT_INFLATER_SERVICE, Context.ACCOUNT_SERVICE, Context.ACTIVITY_SERVICE

image.png

問題實例:


image.png
解決方案:
image.png

21霞掺、@id/message_name can overlap @id/cancel_button if @id/message_name grows due to localized text expansion

image.png
  • 原因:此提示一般出現(xiàn)在RelativeLayout中谊路,此提示的大體意思為:你某個布局(一般出在TextView中)可能會重疊另外一個布局。
解決方案1:如果你自己知道TextView長度肯定不會覆蓋到另外一個布局那么你就可以直接使用此語句(tools:ignore="ContentDescription")
解決方案2:如果你不確定是否會覆蓋菩彬,你同樣可以使用以下語句控制字長(android:maxEms="6"

android:singleLine="true" android:ellipsize="end" )

解決方案3:如果你不確定是否會覆蓋缠劝,你還可以直接加上在某某可能被覆蓋控件的左邊或者右邊

22、String literal in setText can not be translated. Use Android resources instead與Do not concatenate text displayed with setText. Use resource string with placeholders

image.png
  • 解釋:就是告訴你setText里面字符串要使用資源文件里面的骗灶,第二個的大概意思setText中不要使用拼接的方式
解決方案:將文字替換成:getString(R.string.attentionTa)惨恭,第二個將拼接的文本提取出來在傳進去或者數(shù)字使用:String.valueOf()

23、the resource 'R.color.aqua' appears to be unused

image.png
  • 解釋:說這個資源你沒有用到
解決方案:直接刪除即可

24耙旦、Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run)

image.png

25脱羡、Possible overdraw: Root element paints background @color/fff with a theme that also paints a background (inferred theme is @style/AppTheme)

image.png
  • 解釋:多次繪制區(qū)域;


    image.png
解決方案:盡量把background部分的顏色放子布局中免都,或者自定義主題锉罐,將背景色設置進主題,在運用主題
解決方案1:在主題中加: <item name="android:windowBackground">@null</item>

然后在其他布局中最外層的布局都加上背景色


26绕娘、Avoid passing null as the view root (needed to resolve layout parameters on the inflated layout's root element)

image.png
  • 解釋:避免傳遞null作為視圖根(需要解決布局參數(shù)對充氣布局的根元素)
解決方案:如果有父控件可以使用 LayoutInflater. from(mContext). inflate (R.layout.item_activity, parent,false) ;此方法第二個參數(shù)為父控件脓规,第三個參數(shù)為false加載出來的布局就不會掛在到父控件上,true則反之险领。如果拿不到父控件也可以使用這個填充器: View.inflate(mContext,R.layout.item_supremacymember_dialog, null);

這個與LayoutInflater.from(mContext).inflate(R.layout.item_supremacymember_dialog, null);相同侨舆,他(View.inflate)內(nèi)部還是調(diào)用了下面這(LayoutInflater.from(mContext).inflate)。


27绢陌、Avoid object allocations during draw/layout operations (preallocate and reuse instead)

image.png
  • 解釋:在draw和layout和onMeasure方法中最好不要創(chuàng)建對象挨下,因為這些方法在一次顯示過程中會根據(jù)父布局的需要不止一次的調(diào)用。
解決方案:將其new 方法提取出去下面。如:
image.png

28复颈、The view name (@+id/userPhone) suggests this is a phone number, but it does not include 'phone' in the inputType (id defined here)

image.png
  • 解釋:系統(tǒng)判斷你這個可能是手機號碼,所以建議你將inputType類型設置成"phone"
解決方案:android:inputType="phone"

29、This text field does not specify an inputType or a hint

image.png
  • 解釋:這個文本框不指定一個inputType或一個提示
解決方案:添加一個inputType屬性或者添加一個hint屬性

30耗啦、Avoid using sizes smaller than 12sp: 8sp

image.png
  • 解釋:避免使用尺寸小于12 sp:8 sp凿菩,其實就是想告訴你小于12sp真的太小啦,系統(tǒng)建議你改成12sp帜讲,因為他覺得12sp已經(jīng)很小了衅谷,不建議比12sp還小
解決方案:根據(jù)系統(tǒng)提示將所又小于12sp的都改了。(我選擇忽略此問題)

31似将、Field can be converted to a local variable

image.png
  • 解釋:字段可以轉(zhuǎn)換為一個局部變量
解決方案:將此變量改為局部變量

上一篇:AndroidStudio之代碼優(yōu)化Lint

下一篇:阿里云服務器搭建及遠程自動化部署-java+tomcat+mysql+Alibaba Cloud(入門篇)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末获黔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子在验,更是在濱河造成了極大的恐慌玷氏,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腋舌,死亡現(xiàn)場離奇詭異盏触,居然都是意外死亡,警方通過查閱死者的電腦和手機块饺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門赞辩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人授艰,你說我怎么就攤上這事辨嗽。” “怎么了淮腾?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵糟需,是天一觀的道長。 經(jīng)常有香客問我来破,道長篮灼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任徘禁,我火速辦了婚禮,結(jié)果婚禮上髓堪,老公的妹妹穿的比我還像新娘送朱。我一直安慰自己,他們只是感情好干旁,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布驶沼。 她就那樣靜靜地躺著,像睡著了一般争群。 火紅的嫁衣襯著肌膚如雪回怜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天换薄,我揣著相機與錄音玉雾,去河邊找鬼翔试。 笑死,一個胖子當著我的面吹牛复旬,可吹牛的內(nèi)容都是我干的垦缅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼驹碍,長吁一口氣:“原來是場噩夢啊……” “哼壁涎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起志秃,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤怔球,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后浮还,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庞溜,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年碑定,在試婚紗的時候發(fā)現(xiàn)自己被綠了流码。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡延刘,死狀恐怖漫试,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碘赖,我是刑警寧澤驾荣,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站普泡,受9級特大地震影響播掷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜撼班,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一歧匈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砰嘁,春花似錦件炉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缅阳,卻和暖如春磕蛇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工秀撇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留超棺,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓捌袜,卻偏偏與公主長得像说搅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子虏等,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

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