你在使用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有哪些高大上的項目?
※如何運營一個開源項目並取得較大影響力?