最近在做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以下的手机运行顺畅。

解决方案 »

  1.   

    你打个log看看具体画了几次,我感觉不止20次
      

  2.   

    参考https://issuetracker.google.com/issues/64882137
    看来是android 8.0 的一个bug,可以安装下最新的补丁或升级到8.1试试
      

  3.   

    额,这个我真的不会,canvas.drawbitmap最后都是调用的系统的jni代码,看看是否有大神会改吧
      

  4.   

    同发现这个问题 4.2手机 绘制时间 38ms 8.0要150ms左右 差别非常大
      

  5.   

    在Android 2.3.3(API级别10)和更低的情况下,位图的后备像素数据被存储在本机存储器中。它与位图本身是分开的,位图本身存储在Dalvik堆中。本机存储器中的像素数据不以可预测的方式释放,可能导致应用程序短暂地超过其内存限制和崩溃。从Android 3(API级别11)到Android 7.1(API级别25),像素数据被存储在Dalvik堆中,以及相关联的位图。在Android 8(API级别26)和更高的情况下,位图像素数据被存储在本机堆中。
    不知道这个有用没有, 缩放确实 能降低帧数, 我的缩放设置为1时速度还可以, 2时就明显慢很多了!