你在使用Android開源項目的過程中都遇到過哪些坑?

android平台有很多優秀的開源項目,在項目開發過程中,選擇合適的開源項目會大大減少開發中重複的勞動,提高開發效率。但最難的在於這個合適,網上很多文章介紹開源項目時往往是報喜不報憂,導致使用了開源項目後,由於開源項目的問題導致項目存在不可改善的缺陷。

舉幾個栗子:

1、比如fancycoverflow滑動卡頓的問題;

2、fresco體積大的問題;

3、activeandroid初始化耗時的問題;


8.31更新

CircleImageView配合glide使用,無法顯示,原因在於glide內部使用drawable不同。解決,直接使用glide生成圓形圖片。

___________________________________

AndroidEventbus 過快頻率post消息(200ms一次甚至更快),有些消息會接收不到。

Asynchttpclient 非同步線程中無法使用asynchttpclient,需使用synchttpclient。(這個算是使用規則了,初次使用的人幾乎都不知道)

Fastjson (老版本)解析轉換string至jsonobject不會拋異常,直接崩(因為這個改為使用gson)

Kotlin 使用kotlin與java混編,使用kotlin調用java函數後的回調,java中不寫notnull註解的參數,kotlin實現的回調中不寫空安全。一旦回調參數為空,就崩。

Vitamio 一個應用內部多處使用,不定期會崩,報底層錯誤(各種資源回收都沒用)。改為一處用原生mediaplayer一處用vitamio,解決。

Android-serialport-api串口讀寫類,在真機上(不是電腦的usb轉串口)出現對方byte[]發送,接收卻只能1byte1byte讀取的情況。

以上為個人開發中遇到的情況,當然不否定可能是我用法不對或其它個人原因造成。


Volley+Okhttp搭配時導致http header被覆蓋的bug,由於Volley的BaseNetwork裡面使用TreeMap來保存headers,所以對於重複的header key會被覆蓋掉。解決辦法:對於重複的header key進行判斷,然後用";"拼接。


問這個問題的目的是請踩過坑的朋友分享一下經驗,避免其它同行在使用開源項目的時候再走一次彎路,回答的人比較少,先自問自答一下。

  • FancyCoverFlow 這個控制項在API高於16的設備中,會強制刷新一遍,導致切換和初始化的時候都很卡,當時覺得這個效果挺好,後來用上之後這個控制項成了性能瓶頸;

  • Fresco 這個控制項用起來特別爽,唯一的缺陷的相比於相同功能的其它開源項目(Glide、Picasso),體積過大;
  • ActiveAndroid 這個輕量級的資料庫框架也挺好用,但缺陷是初始化耗時,可以看一下這篇文章:在Android中使用反射到底有多慢?
  • JXL 一個讀寫Excel文件的開源庫,用起來很方便,但有個問題:文件大小超過5M直接掛掉;
  • JPinyin 漢字轉拼音的一個工具庫,APK加密後這個庫不能正常使用,後來查出是因為項目中數據的問題,加密後數據的內容變化了,最後只能自己改造,將數據按照我們自己的方式處理。


4.0以上如果開啟硬體加速在View的ondraw()方法里會畫不了虛線,解決辦法是創建一個bitmap,在那上面畫好後,最後canvas.drawBitmap


slidingmenu菜單里要是放listview的話點擊事件無效,會和關閉slidingmenu衝突,的重寫


Fresco的坑很多:

1. 體積大, 項目使用Fresco後生成的apk文件大了5M左右;

2. wrap_content布局屬性還是用要慎重, 如果layout_width和layout_height都為wrap_content時整個視圖都顯示不出來(寬和高為0), 參考Fresco前傳(3):之為什麼圖片不顯示(坑爹的wrap_content);

3. 截至fresco0.9.0版仍存在載入so庫在某些手機上會crash的問題, 需要使用者自行修復, 參考java.lang.ExceptionInInitializerError after update 0.9.0 · Issue #933 · facebook/fresco · GitHub ;

4. DraweeView中無法單獨拿到Bitmap, 只能通過BasePostprocessor(後置處理器)來獲取Bitmap的引用, 這些都使得自定義DraweeView變得很麻煩;

5. 無法控制圖片載入策略, 比如不能設置優先顯示來自於網路的圖片, 線上的某張圖片已經修改後還是使用本地緩存的圖片(在url加錨點可破).

6. 無法通過ImageRequest的方式載入xml後綴的自定義drawable文件, 只能通過設置PlaceholderImage來部分支持(這樣調用方式都無法統一);

以上如有錯誤請指出, 原諒本人學識的不足.


gson對時間類型支持不好

volley舊版listener處理不好

jndi坑


Bottombar點擊過快會丟掉監聽事件,解決方法,不要用這個控制項


某些下拉刷新的第三方庫會導致listview失去焦點無法執行item點擊,解決方法是調用listview的重獲焦點方法……具體方法名我忘記了……


xml 中的屬性命名衝突


推薦閱讀:

假如開源項目創始人去世了,項目怎麼辦?
為什麼很多美國IT公司願意開源自己的某些代碼?
如何看待阿里開源的dexposed框架?
Python有哪些高大上的項目?
如何運營一個開源項目並取得較大影響力?

TAG:程序員 | Android開發 | 開源 | GitHub | Android |