Android 常見Bug及Solutions備忘

1.Canvas.clipPath :java.lang.UnsupportedOperationException

Bug原因:
出現原因是4.0硬件加速出的問題

解決方案:
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB)
{
   myCusomView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}


2. Android 2.x上 Listview selector鋪滿背景問題

Bug原因:
 Android < 3.0 bug 如果list selector中使用@color(即ColorDrawable)就會導致該問題

解決方案:
使用其他Drawable替代,例如ShapeDrawable


3. ListView ExpandableListView分割線消失問題

Bug原因:
ListView分割線設置方法setDivider、setDividerHeight調用順序問題,在setDivider之前調用setDividerHeight是無效,因爲setDivider方法會將dividerHeight重置爲0(想見ListView.setDivider方法)

解決方案:
在setDivider之後調用setDividerHeight


4. Android Toast不顯示問題

Bug原因:
常見原因分兩類:1.使用正確但應用系統設置中“顯示通知”被取消  2.Toast使用錯誤(如非UI線程使用Toast、Context錯誤、遺漏.show()調用等)

解決方案:
第一種情況去應用設置裏面將“顯示通知”(通常在強制停止下面)勾選上
第二種情況修正用法即可


5. 複用StringBuilder忘了清空易引發OOM

Bug原因:
複用StringBuilder未清空之前的內容導致OOM(尤其是在循環中)

解決方案:
複用StringBuilder之前一定要清空內容

6. View getHitRect出錯

Bug原因:
系統bug,在view做完動畫後,getHintRect返回可能出錯(http://stackoverflow.com/questions/17750116/strange-view-gethitrect-behaviour)

解決方案:
Rect outRect = new Rect();
int[] location = new int[2];
mSeekBar.getDrawingRect(outRect);
mSeekBar.getLocationOnScreen(location);
outRect.offset(location[0], location[1]);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章