快速定位該網(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相關(guān)控件如ImageView和ImageButton都會出現(xiàn)這個警告贯底!
- 原因:這些控件一般都是有圖片的耘眨,而圖片含有多種物體和顏色傅物,但是考慮到我們小伙伴有少數(shù)色弱的小伙伴怖现,可能無法分別圖片的物體蹂随,所以希望我們加上contentDescription這個屬性十嘿。至于這個屬性是做什么的呢?這個屬性是對這個控件的圖片進行描述的岳锁,比如可能Android的一些程序可以用聲音告訴使用者這個圖片畫的是什么绩衷,他們讀的就是你contentDescription的內(nèi)容。
解決方案1:如:加上>>>android:contentDescription="@string/pay_vip">>>這個屬性就好
解決方案2:(忽略這個提示)
你可別告訴我你在一個一個的加<ぢ省?妊唷!
直接右擊這個問題外層的包乒躺,把所有需要加的屬性的控件全部加上
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.
這個問題一般都出在: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
- 原因: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
- 翻譯:考慮使用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"
- 翻譯:這LinearLayout應該使用android:layout_height = " wrap_content”
解決方案1:改成wrap_content即可
6蝴韭、This <FrameLayout> can be replaced with a <merge> tag
這個問題一般都出在: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)
- 原因: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")
示例代碼:
參考文章:
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1106/1922.html
8涂臣、Use new SparseIntArray(...) instead for better performance
- 原因:SparseArray(是一個android提供的一個工具類)單純從字面上來理解,SparseArray指的是稀疏數(shù)組(Sparse array) 售担,所謂稀疏數(shù)組就是數(shù)組中大部分的內(nèi)容值都未被使用(或都為零)赁遗,在數(shù)組中僅有少部分的空間使用。因此造成內(nèi)存空間的浪費灼舍,為了節(jié)省內(nèi)存空間吼和,并且不影響數(shù)組中原有的內(nèi)容值涨薪,我們可以采用一種壓縮的方式來表示稀疏數(shù)組的內(nèi)容
解決方案:根據(jù)提示替換成SparseArray
參考文章:https://liuzhichao.com/p/832.html
替換示例:
9骑素、Use a layout_height of 0dp instead of fill_parent for better performance
這個問題一般都出在:外層是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()
- 原因:Cursor使用完后記得釋放掉
解決方案:添加:cursor.close();
13安吁、Nested weights are bad for performance
- 原因:在布局進行嵌套使用時醉蚁,父布局與子布局都使用了android:layout_weight,但不是必須使用時鬼店,便會出現(xiàn)如題所示的警告信息
解決方案:去掉一個不需要的android:layout_weight屬性
14网棍、This tag and its children can be replaced by one <TextView/> and a compound drawable
- 原因:可以直接給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)
- 原因:部分區(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
- 原因:這LinearLayout LinearLayout布局或其父母是無用的,就是你布局可以刪除一個沒用的效果是一樣的如贷。
解決方案:刪除一個不需要的布局就好
17豁状、Typo: In word 'xyz'(拼寫錯誤,可以不管)
18倒得、android:singleLine is deprecated: Use maxLines="1" instead
- 翻譯:棄用android:單行模式:使用maxLines =“1”
解決方案:將報錯的改成android:maxLines="1"
錯誤的:
正確的:
19泻红、incomplete translation(國際化文字適配)
解決方案1:(如果你不打算適配國際化)直接全部忽略掉
解決方案2:如果你需要國家化你就添加多國語言
打開編輯器:
選擇適配的語言:
設置:
20、Must be one of: Context.POWER_SERVICE, Context.WINDOW_SERVICE, Context.LAYOUT_INFLATER_SERVICE, Context.ACCOUNT_SERVICE, Context.ACTIVITY_SERVICE
問題實例:
解決方案:
21霞掺、@id/message_name can overlap @id/cancel_button if @id/message_name grows due to localized text expansion
- 原因:此提示一般出現(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
- 解釋:就是告訴你setText里面字符串要使用資源文件里面的骗灶,第二個的大概意思setText中不要使用拼接的方式
解決方案:將文字替換成:getString(R.string.attentionTa)惨恭,第二個將拼接的文本提取出來在傳進去或者數(shù)字使用:String.valueOf()
23、the resource 'R.color.aqua' appears to be unused
- 解釋:說這個資源你沒有用到
解決方案:直接刪除即可
24耙旦、Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run)
25脱羡、Possible overdraw: Root element paints background @color/fff with a theme that also paints a background (inferred theme is @style/AppTheme)
-
解釋:多次繪制區(qū)域;
解決方案:盡量把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)
- 解釋:避免傳遞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)
- 解釋:在draw和layout和onMeasure方法中最好不要創(chuàng)建對象挨下,因為這些方法在一次顯示過程中會根據(jù)父布局的需要不止一次的調(diào)用。
解決方案:將其new 方法提取出去下面。如:
28复颈、The view name (@+id/userPhone) suggests this is a phone number, but it does not include 'phone' in the inputType (id defined here)
- 解釋:系統(tǒng)判斷你這個可能是手機號碼,所以建議你將inputType類型設置成"phone"
解決方案:android:inputType="phone"
29、This text field does not specify an inputType or a hint
- 解釋:這個文本框不指定一個inputType或一個提示
解決方案:添加一個inputType屬性或者添加一個hint屬性
30耗啦、Avoid using sizes smaller than 12sp: 8sp
- 解釋:避免使用尺寸小于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
- 解釋:字段可以轉(zhuǎn)換為一個局部變量
解決方案:將此變量改為局部變量