Android開發踩坑及最佳實踐(工作踩坑記錄 持續更新...)
音訊相關:
1)Vivo X9 發現使用usb安裝時,提示無法解析包,需在setting中禁用install run
- oppo R7s(4.4) Vivo X9(7.1) 錘子手機(7.1)等在許可權管理時都有各自的處理方式,其中 oppo R7s會檢測Api方法的呼叫,後兩個手機有I管家和 安全中心, 在管家和安全中心未授權時,檢測許可權仍然是已獲得許可權的狀態,此時需要設定定時器,檢查操作是否執行成功,比如音訊流
3)因為Oppo R7s(4.4) 和錘子(7.1.1)以及其他低於6.0的機型,在許可權管理時做了系統Rom級別的個性化定製。為了相容這些許可權獲取邏輯,在點選錄音按鈕時,會先開啟錄音,同時開啟定時器檢查,錄音檔案裡有沒有內容
(沒有許可權的話,就沒有內容,有許可權,就有內容)。如果錄音檔案有內容說明有許可權,就正常錄音,如果錄音檔案沒有內容,輪詢10s 還是如此的話,就將定時器和錄音停掉。
4) 但是 Vivo X9 手機即使沒有錄音許可權, 還是可以將音訊流寫入檔案,所以除了要判斷檔案length還需要判斷 //audioChunk.maxAmplitude() 其值一直為-2.147483648E9
5)實現音訊轉碼由ffmpeg 改為 Lame提高wav轉MP3的效率
在wav音訊經過SoundTouch變聲,再經過Lame 轉mp3時,會啪 的一聲,
解決方式是跳過前面500 到 4096位元組的流的寫入(Wav header )即Wav頭不寫入。
6)音訊錄製和covertWav2Mp3的過程中,音訊檔案一直被佔用或者outputStream忘記close,導致在Oppo R7s上, 音訊可以被刪除,但是下次建立時,會出現netease_audio_night變成不可識別目錄檔案的問題
其他:
1)使用MediaPlayer播放網路音訊時,要選用prePareAsync的方式,如果使用prepare方式,在無網路時,會播放阻塞造成ANR
2)在使用SoundTouch時, 在gradle build 時提示 ndK編譯
error: undefined reference to '__atomic_fetch_add_4'
需要在Android.mk中 加入LOCAL_LDLIBS += -latomic
3)以後在ViewHolder中 想知道某個View的寬高,或者想知道這個View layout 完成,使用addOnLayoutChangeListener 而不是viewTree 的GlobleLayout
關於RecycleView
發現一個有趣的事情,複寫ViewHolder.Adapter中的 onViewAttachToWindow 和 onViewDetachFromWindow (不管是LinearLayoutManager 還是GridLayoutManager)
1)該Adapter可見的Item中存在定時器在執行,且最後一個ViewHolder的View Item如果只顯示了一半,
- 必須要在第一屏,或者在第一屏下面的一兩條資料
3)在滿足1) 2)的條件下,這個ViewHolder 會一直觸發 onViewAttachToWindow 和 onViewDetachFromWindow
4)只有當一個ViewHolder的Item 的這一行全部顯示的時候(沒有被遮擋) 該ViewHolder的onViewAttachToWindow方法才會被執行
5)只有當一個ViewHolder的Item的這一行 完全不顯示的時候(一點都不顯示) 該ViewHolder的onViewDetachFromWindow方法才會執行
- 快取的ViewHolder的數目,會比 Visible 的Item 的數目多,比如可見item 9個,那麼建立的ViewHolder的數目>9 在展示第11條資料的時候
第11條ViewHolder會複用第0條ViewHolder 第0條ViewHolder的 onViewRecycled方法會執行
相關文章
- 踩坑記[持續更新]
- vmware+ubuntu 踩坑記錄,持續更新Ubuntu
- Flutter踩坑日記(持續更新...)Flutter
- React SSR重構踩坑記錄(持續更新)React
- 前端開發踩坑日誌(持續更新。。。)前端
- Flutter實際專案開發中踩坑大合集(持續更新..)Flutter
- uniapp開發踩坑記錄APP
- 使用 Jenkins 配置 iOS 持續整合踩坑實錄JenkinsiOS
- vue+elementUI專案的踩坑~~持續更新VueUI
- Android Studio踩坑記錄Android
- laravel踩坑記錄Laravel
- sealos踩坑記錄
- DietPi踩坑記錄
- 專案踩坑記錄, 長期更新
- Taro踩坑實踐
- strtotime 踩坑記錄
- ABP框架踩坑記錄框架
- Electron工程踩坑記錄
- gorm踩坑記錄(一)GoORM
- MySQL_踩坑記錄MySql
- Python使用ClickHouse的實踐與踩坑記錄Python
- Weex線上踩坑實錄
- Vue踩坑筆記(更新ing)Vue筆記
- Flutter 開發踩坑記錄(乾貨總結)Flutter
- 卡片開發使用偽類之踩坑記錄
- vue-awesome-form的實現及踩坑記錄VueORM
- Laravel7 踩坑記錄Laravel
- vuePC專案踩坑記錄Vue
- React專案踩坑記錄React
- node link 踩坑記錄
- ES6踩坑記錄
- Go json 踩坑記錄GoJSON
- Taro 小程式 踩坑記錄
- Mac下Charles踩坑記錄Mac
- 微信小程式踩坑記錄微信小程式
- React同構踩坑記錄React
- iOS11踩坑記錄iOS
- list複製踩坑記錄