webview視頻播放出現白屏、藍屏、花屏、黑屏等等
但由于布局結構是android+webview+H5+本地視頻等。視頻播放導致的異常排查起來十分復雜且沒有原生的相關日志
于是需要給webview播放視頻進行硬件加速,剛開始以為是一件很簡單的配置而已。本著無經驗從頭開始的原則(雖然搞了十多年android開發)。從頭查資料核實,結果發現還真有些不一樣的說法和講究。資料只是資料,實際效果還是要看設備運行情況
硬件加速配置
Application 級別(全局)
在 AndroidManifest.xml 的 節點加一行:
<applicationandroid:hardwareAccelerated="true"... />
這個是常規配置,大家都知道
Activity 級別(單個界面)
<activityandroid:name=".YourActivity"android:hardwareAccelerated="true" />
這個是為了開啟webView里的視頻加速設置的,資料顯示如果要在webView里進行硬件加速Application和Activity都需要配置這個。
Java 代碼里動態打開,在 Activity.onCreate()早于 setContentView() 處寫
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {getWindow().addFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
}
針對某個 View 硬件加速(可選)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {someView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
在14以上的API默認都是打開的,但是國內的手機廠家會做哪些騷操作并不確定,所以還是加上硬件加速配置比較好
注意事項
? 硬件加速默認在 Android 4.0(API 14)及以上自動開啟,但 WebView 必須手動確認第 1 或第 2 步,否則會出現視頻黑屏、Canvas 異常等問題。
? 運行時標志位(第 3 步)不能關閉硬件加速,只能檢測或開啟;如想關閉需回退到 Manifest 配置或 setLayerType–確認是否關閉
后記
事實上按以上配置后,實際效果并沒有肉眼可見的改善,此方案只是基礎支撐,但視頻播放問題并不在硬件加速方面
好用的開發工具
推薦理由
postman在國內使用已經越來越困難:
1、登錄問題嚴重
2、Mock功能服務基本沒法使用
3、版本更新功能已很匱乏
4、某些外力因素導致postman以后能否使用風險較大
5、postman會導致電腦卡頓,而且使用的功能越多越慢,尤其是win電腦,太讓人郁悶了
出于以上考慮因此筆者自己開發了一款api調試開發工具SmartApi,滿足基本日常開發調試api需求
SmartApi
win版本不大于1M;運行消耗性能極低
macos 版本不大于100M;運行消耗性能極低
SmartApi只為開發服務
官網地址SmartApi
http://www.smartapi.site/