最近開發中的一些坑#1
牢騷
最近回學校, 聽說阿里好多實習生都被拒了, 不過大概都被撿漏了, UC這方面還沒動靜, 不知道是打算把我當臨時工使還是怎麼, 有點煩躁, 還是得加強自己的能力才行.
最近半年一直在做音樂播放器專案, 開發期間遇到了許多奇怪的問題, 有些我單獨寫了文章, 有些只是臨時找到了解決方法, 沒有仔細研究, 這裡先總結一下.
坑
下載進度item無法長按
上面是一個比較常見的下載item, 開發中我們發現經常出現不能對其進行長按操作的情況, 表現就是長按後長按被取消.
追蹤原始碼, 最可疑的地方就是requestLayout
.
一個控制元件呼叫requestLayout
, 很可能讓他的父控制元件也調這個, 有可能導致最外圍的item把自己的狀態清除掉.
在很多情況下都會導致控制元件呼叫這個方法, 比如setText
setImage*
, 當時釋出比較趕, 沒有仔細看TextView
的原始碼具體是個什麼情況, 但是有一點可以確定, TextView
在寬度為match_parent
並且singleLine
為true
的情況下給他設定文字是不會呼叫requestLayout
的, 這是我當時測試的結果, 我們解決這個問題的方法就是讓圖中的所有文字都只允許單行, 且寬度match_parent
, 至於右下角, 那是將gravity
設為right
了, 兩個TextView
在一個FrameLayout
裡.
ViewPager無法滑動
大家可以試一試, 讓ViewPager有兩頁就行, 其中一頁放上一個TextView
singleLine
為true
, 並且把ellipsize
設定成marquee
, 然後把文字內容設定成一個非常長的字串, 然後手指在這個TextView
上滑動, 你會發現ViewPager根本不動. 追查程式碼, 其實是
TextView
自身有毛病. 大家知道
ViewPager
支援巢狀, 而他們之所以能巢狀是因為ViewPager
在準備攔截事件滑動之前, 會先通過ViewCompat.canScrollHorizontally
詢問當前頁面裡面有沒有能在當前滑動方向上能滑動的控制元件, 當然這裡有碰撞檢測, 只有手指能碰到的View
才會被詢問, 而TextView
竟然在上面條件滿足時在一定情況下返回true
ViewPager
認為內層View
可以優先滑動, 就不攔截事件了. 其實這個東西應該是給EditText
使用的, 不知道TextView
湊什麼熱鬧, 印象裡面TextView
根本沒有接受滑動手勢這麼一個功能. 在三星手機上不會出這個問題, 因為三星對
marquee
的處理統一是end
, 這是三星的bug. 解決方案最簡單的就是ellipsize
不要用marquee
, 用end
. 剛才又發現下面這個有可能會出現同樣的問題, 把
gravity
刪掉就好
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:gravity="center"
android:ellipsize="end"/>
UIL圖片錯亂
如果你用UIL載入res/drawable
目錄下的圖片, 恰好又把cacheOnDisk
設為true
了, 那麼下個版本很可能出現圖片錯亂的問題, 根源在於UIL通過R.drawable.id
將圖片快取在了磁碟上, 而這個id很可能對應的不是同一張圖片, 關於這個我單獨寫了一篇文章, 詳情請移步為什麼不推薦用UniversalImageLoader載入res/drawable
saveLayer效能問題
最近有個圖示漸變色需求, 不僅要求圖示能隨意更換顏色, 還要能染漸變色, 我重寫了了ImageView.onDraw
來實現, 用了一個叫saveLayer
的東西, 現在看來好像有優化的餘地, 但針對這個問題, saveLayer
好像很吃效能, 搞的介面非常卡, 所以如果你的View
用了saveLayer
, 務必在初始化的時候把硬體加速開啟, 對應的方法是View.setLayerType
不要主動呼叫on*方法
這個真的是開發的準則了, 凡是on***的方法, 都不應該主動呼叫, 比如activity不應該主動呼叫自己的回撥函式.
我們最近一期做了一個換膚功能, 有個onThemeChanged
方法, 會把當前主題傳進來, 是外部回撥的, 我們偷懶, 在初始化的時候也用這個方法初始化, 結果因為這個方法要調super.onThemeChanged
, 加上繼承層次上很多類都重寫了這個方法, 也在初始化的時候調了這個方法, 由於多型的存在, 這個方法呼叫鏈會反覆執行好幾次.
相關推薦
最近開發中的一些坑#1
牢騷 最近回學校, 聽說阿里好多實習生都被拒了, 不過大概都被撿漏了, UC這方面還沒動靜, 不知道是打算把我當臨時工使還是怎麼, 有點煩躁, 還是得加強自己的能力才行. 最近半年一直在做音樂播放器專案, 開發期間遇到了許多奇怪的問題, 有些我單獨寫了文章,
Android 開發中一些不得不知的坑(二)
如何正確的在ScrollView裡做巢狀 日常開發中,經常會遇到ScrollView巢狀ListView,GridView或者是ViewPager,更有甚者是ScrollView巢狀ScrollView,這樣一來必然會導致一系列的問題,比如ListView顯示
前端開發中一些容易混淆的概念匯總
提交表單 容易 html text bmi blog 技術分享 mit script ★:HTML中,按鈕button與submit區別是什麽? 1,button 定義可點擊按鈕(多數情況下,用於通過 JavaScript 啟動腳本)。 2,submit 定
關於微信公眾號開發的一些坑
response com type 簽名 scope 百度分享 授權 微信公眾號 href 一.微信分享是不允許開發者在頁面調用,只能通過上方菜單點擊才可以實現分享 解決方法:1.彈出遮蓋層提示用戶點擊上方按鈕 2.百度分享js可以調用許多分享接口 二.微信
React-Native開發中的坑點實錄
從移動開發的角度來說,iOS和Android都有自己的一些UI特性,所以react-native宣稱的寫一套程式碼就可以通用就是騙人的鬼話,實際開發中,你會發現很多控制元件在iOS和Android上展示的效果不一樣,或者有些屬性支援iOS不支援Android。rea
最近遇到的一些坑
C++ 邏輯判斷的順序是從左向右的。conditionA&&conditionB 與 conditionB&&conditionA並不一定等價。 舉個例子: void InsertSort(vector<int> &arr, in
Java開發中一些必備經典Eclipse外掛以及使用集萃
在我們開發的過程中,為了提高生產效率或者開心開發,我們大家肯定每個人或多或少肯定會有一些自己的習慣和技巧;而且每個人的習慣和技巧都可能不太一樣,所以,筆者準備拋磚引玉,大家一起來討論交流一下。我會根據和
Android開發中一些被冷落但卻很有用的類和方法
來自:http://luckyandyzhang.github.io/ Resources.getIdentifier : 這個我 用過,記得以前做過一個面板切換功能,可以通過這個方法從面板包 獲取面板資源。 (面板包的資源名稱和 主包的資源名稱id 名是一樣的
遊戲開發中的坑之四 關於單位
Unity的一個單位為一米(m) 如何設定3dsMax的單位才能保證模型大小正確呢? 首先假如3dsMax的單位設定如下: 以上的意思是3dsMax中一個單位為1cm,並且顯示的單位為cm 如果以這個設定匯入Unity的話,保持Scale Factor為1,需要勾
專案開發中的坑
一個較為失敗的專案覆盤 寫在前面 前一陣子部門啟動了一個新的專案叫做資源成本決策系統,到目前此專案已經基本上按照啟動前的規劃做的大差不差,但最近開會需要在這個專案中新增新的功能,這可真是要了命了,想想不管從資料庫上設計上,程式碼設計上可拓展性都比較差,專案換
移動開發中一些bug及解決方案
網頁開發要面對各種各樣的瀏覽器,讓人很頭疼,而移動開發中,你不但要面對瀏覽器,還要面對各種版本的手機,ios好一點,而安卓就五花八門了,你可能在開發中也被它們折磨過,或者正在被它們折磨,我在這裡說幾個我在開發中遇到的比較難纏問題,和解決方案,給其他朋友提個醒,因為一旦碰到了這
iOS開發中一些實用小程式碼
1.判斷郵箱格式是否正確的程式碼: //利用正則表示式驗證 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected
H5+CSS寫網頁時遇到的一些坑(1)
1.英文換行問題,其實只是個英文單詞的問題,需要在測試網頁的時候留心一下 我們想要這樣的效果,嗯,看起來很不錯 結果把圖片設定好了之後(float,大小什麼的),興高采烈的F5了一下,以為達到了預期效果,結果是這樣的…… wtf,這和說好的不一樣啊,然後我就開始
iOS開發中一些常用的方法
1.壓縮圖片#pragma mark 處理圖片 - (void)useImage:(UIImage *)image { NSLog(@"with-----%f heught-----%f",image.size.width,image.size.height);
vue使用中一些坑整理(componet等)
建立元件 var aaa = Vue.component('labelSearch', { template: '<div>3333333333333333444</div>', data: function ()
談一談Java開發中的坑(一) -- log4j2在SaaS專案中的應用
背景介紹: 做server端開發有些年頭了,特別是開始做SaaS型別的專案時,深知log的重要性,特別是半夜三更使用者(大都是美國那邊的)遇到問題的電話打過來,這個時候沒有一個強大log,那只有抓瞎的份了。以前都是走的微軟系的開發工具,log的框架也是別人早就寫好的,所以
Java專案開發中一些BUG的總結
1,JVM Bind 2, hbm主鍵生成策略錯誤: Struts Problem Report Struts has detected an unhandled exception: Messages: ids for this class must be
Spring Boot和JPA開發的一些坑
最近新的專案API介面基於Spring Boot和JPA開發,做了幾天的學習和預研,發現使用Spring Boot開發效率上確實比較高,但也碰到了一些小坑,特別記錄下。 配置檔案問題 ,預設只要一個
高德地圖開發中的坑
1。不設定Marker 的 Title 自定義的infowindow就無法顯示, 解決辦法:加上title 2。自定義infowindow時傳進去的view的最外層佈局引數不起作用, 解決辦法:在
遊戲開發中的坑之六 烘焙光照神器Bakery
前段時間在Asset Store 中發現一個烘焙燈光神器Bakery - GPU Lightmapper, 烘焙的速度在同等質量下,相比引擎自帶的烘焙快太多太多 日常開發中,地編做完一個場景需要烘焙燈光,如果場景較大東西較多,2U也沒分好的話,烘焙時間十分長,甚至需要通宵