既然crash了,java层没有明显致命报错,那么一定是在native层。 native报错相当不明显。
看了下,这个大图有 > 10000 x 20000的像素,占用空间 > 17M.
写了demo,发现BitmapFactory.decodeFile(filePath,tmpOptions)正常,而在项目里BitmapFactory.decodeFile(filePath,options); 此处开始报错的.当然,这么大的图,在手机相册,微博等其他应用上也是crash,微信相册没有crash,但是给了个黑屏。
原来是老项目 targetSdkVersion才24,现在新项目普遍都用新的29了,所以小demo里正常,手机相册,微博等这些大型的 "老项目",即使升级,也不敢轻易升级targetSdkVersion版本。
根本原因是,API28以后,bitmap对象解码,放在native层,由C申请/释放内存,对大图的兼容性,比java不知高到哪里去了。别处看过那个代码,暂时没找到,先记录下这个事情。都过去了一个月了。
网友评论