1. 程式人生 > >最近開發中的一些坑#1

最近開發中的一些坑#1

牢騷

最近回學校, 聽說阿里好多實習生都被拒了, 不過大概都被撿漏了, UC這方面還沒動靜, 不知道是打算把我當臨時工使還是怎麼, 有點煩躁, 還是得加強自己的能力才行.
最近半年一直在做音樂播放器專案, 開發期間遇到了許多奇怪的問題, 有些我單獨寫了文章, 有些只是臨時找到了解決方法, 沒有仔細研究, 這裡先總結一下.

下載進度item無法長按

下載item

上面是一個比較常見的下載item, 開發中我們發現經常出現不能對其進行長按操作的情況, 表現就是長按後長按被取消.
追蹤原始碼, 最可疑的地方就是requestLayout.
一個控制元件呼叫requestLayout, 很可能讓他的父控制元件也調這個, 有可能導致最外圍的item把自己的狀態清除掉.
在很多情況下都會導致控制元件呼叫這個方法, 比如setText

, setImage*, 當時釋出比較趕, 沒有仔細看TextView的原始碼具體是個什麼情況, 但是有一點可以確定, TextView在寬度為match_parent並且singleLinetrue的情況下給他設定文字是不會呼叫requestLayout的, 這是我當時測試的結果, 我們解決這個問題的方法就是讓圖中的所有文字都只允許單行, 且寬度match_parent, 至於右下角, 那是將gravity設為right了, 兩個TextView在一個FrameLayout裡.

ViewPager無法滑動

大家可以試一試, 讓ViewPager有兩頁就行, 其中一頁放上一個TextView

, 設定singleLinetrue, 並且把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也沒分好的話,烘焙時間十分長,甚至需要通宵