最近在做Android8.0系統適配的時候發現個問題,8.0系統的手機上在drawBitmap的時候,當Image的尺寸超過一定限度(發現問題的尺寸是512*256),并且繪制次數較多(通常是回圈內),就會變得非常卡,一幀兩幀的樣子。如果僅僅只繪制一次,那么幀數倒是沒太大變化,基本沒多大影響,但是一旦放到回圈內,幀數立馬就下來了。
for(int i = 0; i < 4 ; ++i)
{
for(int j = 0; j < 5 ; ++j)
{
//封裝的函式,最終就是 drawBitmap(Bitmap bitmap, float left, float top, Paint paint)
Tools.drawImage(g, imgTest, 10*i, 10*j);
}
}
有沒有大神遇到過的?或者知道是什么情況的,求探討解決!只在8.0以上的手機上會這樣,同樣的代碼,7.0以下的手機運行順暢。
uj5u.com熱心網友回復:
你打個log看看具體畫了幾次,我感覺不止20次uj5u.com熱心網友回復:
參考https://issuetracker.google.com/issues/64882137看來是android 8.0 的一個bug,可以安裝下最新的補丁或升級到8.1試試
uj5u.com熱心網友回復:
如果是如此,我們也不能要求所有用戶都去升級到8.1啊,還是得從代碼層面解決這個問題才是上策啊。
uj5u.com熱心網友回復:
不是次數的問題,實際運用的時候,有時候需要遠比20次更多的回圈。并且你沒注意到關鍵,如果是次數的問題,就不會說7.0以下沒問題,只有8.0有問題了,還是得從8.0系統到底改變了些什么出發。
uj5u.com熱心網友回復:
額,這個我真的不會,canvas.drawbitmap最后都是呼叫的系統的jni代碼,看看是否有大神會改吧
uj5u.com熱心網友回復:
更新下問題,今天有了新的發現:并不完全是圖片尺寸大小的問題,今天發現一張400*139尺寸的資源,有同樣大小的三張資源,其中有一張在繪制時,回圈數較多的情況下就掉幀了,我試過降低回圈數,可以恢復正常幀率,但是僅僅是測驗的情況下,可以隨意控制回圈數,這樣并不能解決根本問題,今天先更新這個問題描述,希望能有其他人共同研究這個問題。uj5u.com熱心網友回復:
同發現這個問題 4.2手機 繪制時間 38ms 8.0要150ms左右 差別非常大uj5u.com熱心網友回復:
目前發現是縮放耗時,圖片放大越大耗時越多
uj5u.com熱心網友回復:
我的老游戲也遇到這個問題了,必須修改了! 大家都有什么辦法解決嗎?我的游戲繪制的小圖比較多, 所以卡的不行了!
uj5u.com熱心網友回復:
在Android 2.3.3(API級別10)和更低的情況下,位圖的后備像素資料被存盤在本機存盤器中。它與位圖本身是分開的,位圖本身存盤在Dalvik堆中。本機存盤器中的像素資料不以可預測的方式釋放,可能導致應用程式短暫地超過其記憶體限制和崩潰。從Android 3(API級別11)到Android 7.1(API級別25),像素資料被存盤在Dalvik堆中,以及相關聯的位圖。在Android 8(API級別26)和更高的情況下,位影像素資料被存盤在本機堆中。不知道這個有用沒有, 縮放確實 能降低幀數, 我的縮放設定為1時速度還可以, 2時就明顯慢很多了!
uj5u.com熱心網友回復:
已經搞定了!uj5u.com熱心網友回復:
怎么搞定的!uj5u.com熱心網友回復:
BitmapDrawable?硬體加速?轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/7742.html
標籤:Android
上一篇:關于Android匯入的問題
