Matisse: 【反馈bug】Android 10、华为Honor Magic 2 TNY-AL00 预览图片时 Matisse无响应

Created on 16 Dec 2019  ·  39Comments  ·  Source: zhihu/Matisse

【反馈 bug】 请各位造轮子的大大,有空帮忙解决一哈。 感谢了~

设备名称:Honor Magic 2
型号: TNY-AL00
Android 版本:10
Magic UI版本:3.0.0

编译配置:
compileSdkVersion 29
targetSdkVersion 29
multiDexEnabled true

在matisse 的 demo 操作步骤:
1、 点击 Dracula
2、在图片选择界面,不点击checkBox,而是点击 图片内容本身来查看大图
3、查看大图页面黑屏,10秒后系统弹框 “Matisse无响应。是否将其关闭?”

2781576481530_ pic_hd

Most helpful comment

分析anr,是PhotoMetadataUtils.getBitmapBound(PhotoMetadataUtils.java:88) 这一行卡住了。

All 39 comments

同遇到,怎么解决的。

快速滑动的时候,图片未加载出来的时候,点击预览,黑屏ANR,机型华为Mate30

分析anr,是PhotoMetadataUtils.getBitmapBound(PhotoMetadataUtils.java:88) 这一行卡住了。

options.inPreferredConfig = Bitmap.Config.RGB_565; options.inPreferQualityOverSpeed = false;
暂时把图片质量调低,就不会出现ANR。

options.inPreferredConfig = Bitmap.Config.RGB_565; options.inPreferQualityOverSpeed = false;
暂时把图片质量调低,就不会出现ANR。
还是一样呀,他是直接进去从低质量的滑动到高质量的都没问题,直接点进去看那张高质量直接ANR了

解决了,把URI转路径,用decodeFile。不过感觉好尴尬

解决了,把URI转路径,用decodeFile。不过感觉好尴尬

能说得再具体一点吗?

解决了,把URI转路径,用decodeFile。不过感觉好尴尬

能说得再具体一点吗?

就是你到5楼说的PhotoMetadataUtils---getBitmapBound函数中,传参uri,你把原有的decodeSteam改掉,不要让它走这一种方式,将Uri根据getScheme转成真实的文件路径(这个你网上搜一下很多),然后替换成BitmapFactory.decodeFile(realFilePath, options)就可以了

解决了,把URI转路径,用decodeFile。不过感觉好尴尬

能说得再具体一点吗?

就是你到5楼说的PhotoMetadataUtils---getBitmapBound函数中,传参uri,你把原有的decodeSteam改掉,不要让它走这一种方式,将Uri根据getScheme转成真实的文件路径(这个你网上搜一下很多),然后替换成BitmapFactory.decodeFile(realFilePath, options)就可以了

按你说的方法改了还是没用,不过找到了另外一种解决方法
修改 GlideEngine.java 中
`@Override
public void loadImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {

    Glide.with(context).load(uri)
            .apply(new RequestOptions()
                    .skipMemoryCache(true)
                    .override(resizeX, resizeY).priority(Priority.HIGH)
                    .fitCenter())
            .into(imageView);
}`

新加了 skipMemoryCache(true) 可以生效

怎么还用 获取真实路径的方式,Android 11 就彻底不能获取外部文件的正式路径了。早改早好。

解决了,把URI转路径,用decodeFile。不过感觉好尴尬

能说得再具体一点吗?

就是你到5楼说的PhotoMetadataUtils---getBitmapBound函数中,传参uri,你把原有的decodeSteam改掉,不要让它走这一种方式,将Uri根据getScheme转成真实的文件路径(这个你网上搜一下很多),然后替换成BitmapFactory.decodeFile(realFilePath, options)就可以了

按你说的方法改了还是没用,不过找到了另外一种解决方法
修改 GlideEngine.java 中
`@Override
public void loadImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {

    Glide.with(context).load(uri)
            .apply(new RequestOptions()
                    .skipMemoryCache(true)
                    .override(resizeX, resizeY).priority(Priority.HIGH)
                    .fitCenter())
            .into(imageView);
}`

新加了 skipMemoryCache(true) 可以生效

加了这个点击列表item的时候会整个列表闪一下

没有人来解决一下吗?

临时性的解决方案: 降级到 android 9.0。
即:
compileSdkVersion 28
targetSdkVersion 28

@minibugdev 我就是在都设置为 28 的情况下遇到这个问题的

华为P30 Pro
安卓10
0.5.2-beta4(项目不是AndroidX的,不能升级最新的0.5.3版本很难受)
compileSdkVersion 28
targetSdkVersion 28

我华为p30 pro也是这问题,我手机升级10之前还是正常的 升级10之后就出问题了?是华为系统的bug吗?打开图库的时候,个别图片加载出来,个别加载不出来,但是不管选择加载出来的或没加载出来的,去获取图片路径返回来在Glide都显示不出来。查看大图也是黑屏,你要按时在加载过程中快速滑动的话是必出现这种现象,就是不滑动也时不时会出现这种情况@minibugdev

华为P30 Pro 安卓10 0.5.2-beta4(项目不是AndroidX的,不能升级最新的0.5.3版本很难受) compileSdkVersion 28 targetSdkVersion 28

我华为p30 pro也是这问题,我手机升级10之前还是正常的 升级10之后就出问题了?是华为系统的bug吗?打开图库的时候,个别图片加载出来,个别加载不出来,但是不管选择加载出来的或没加载出来的,去获取图片路径返回来在Glide都显示不出来。查看大图也是黑屏,你要按时在加载过程中快速滑动的话是必出现这种现象,就是不滑动也时不时会出现这种情况@minibugdev

就按上面有人回复的,把路径从URi换成真实文件路径就行了,在它的MediaGrid的setImage()方法中 SelectionSpec.getInstance().imageEngine.loadThumbnail()改为直接用GLide加载,我是华为mate20 安卓10的系统(之前也是只有前9张图片显示,后面都是灰色的空白图)

Android10系统 + targetAPI 29 + 新安装的app(即app不能是手机android9时安装然后升级到android10),就会启用 scoped storage,是得不到外部文件的真实路径的。

知乎APP同样有这个问题,预览会黑屏卡死

这周日华为 Android 10 手机有一个系统更新,安装更新之后这个问题不再出现,我这边用两台手机验证确认华为在最新系统更新中修复了这个问题。

修复后的系统版本如下:
image

后台看到的 ANR 也全部都是华为 Android 10 的设备:
image

分析anr,是PhotoMetadataUtils.getBitmapBound(PhotoMetadataUtils.java:88) 这一行卡住了。

我也是这个问题

【反馈 bug】 请各位造轮子的大大,有空帮忙解决一哈。 感谢了~

设备名称:Honor Magic 2
型号: TNY-AL00
Android 版本:10
Magic UI版本:3.0.0

编译配置:
compileSdkVersion 29
targetSdkVersion 29
multiDexEnabled true

在matisse 的 demo 操作步骤:
1、 点击 Dracula
2、在图片选择界面,不点击checkBox,而是点击 图片内容本身来查看大图
3、查看大图页面黑屏,10秒后系统弹框 “Matisse无响应。是否将其关闭?”

2781576481530_ pic_hd

+1

经过测试,目前在华为最新版本的操作系统上面不会有这个问题

在之前的版本,Mate 30 、P20、P30 上面都有此问题

目前出现的现象就是进入选择视频、或者相册的界面,有些图片或、视频是加载不出来的、然后点击预览会出现 ANR

目前唯一的方案就是将 compileSdkVersion 29、targetSdkVersion 29 修改为 28

烦请大佬尽快解决

目前mate30 测试修复可用方案:
1.解决预览anr
FileInputStream is = null;
is = new FileInputStream(uri.getPath());
BitmapFactory.decodeFileDescriptor(is.getFD(), null, options);
2.解决缩略图加载失败,需要glide 升级至4.11+

这周日华为 Android 10 手机有一个系统更新,安装更新之后这个问题不再出现,我这边用两台手机验证确认华为在最新系统更新中修复了这个问题。

修复后的系统版本如下:
image

后台看到的 ANR 也全部都是华为 Android 10 的设备:
image

荣耀V20MagicUi更新至10.0.0.189依然存在这个问题

@xiaojigugu
@zhanyage
@AlphaGao1993

这个应该是华为系统中的,智能分辨率这个功能造成的(可能性90%)。

这功能什么时候针对什么程序启用,每台手机的做法都不一样。

我这边亲测,出现该问题的机器上,我这边有mate20p、mate30 pro 5g、p30p、p20(有的机器不会出现这个BUG),关闭智能分辨率后,重启应用,缩略图之前不显示的,可以显示出来;预览大图不会卡死

mate30 pro 5g 最新系统版本号都20X+了。但mate20p和mate30,却在18X+。故认为不能通过系统更新判断是否修复。

同时,如果关闭了智能分辨率,图片可以大图预览(都可行,目前还没遇到不可生效的机器),则切换回智能分辨率,BUG无法重现。从此之后都正常了。(所以也不保证百分之百是智能分辨率问题)。

我这边的解决方式,是华为EMUI10,且Android10的系统,全部调用系统的com.android.gallery3d的picker进行图片视频选择。

我觉得还是跟 scope storage 有关。

buildToolsVersion=29.0.2
compileSdkVersion=29

代码里都用 URI,然后加 requestLegacyExternalStorage, 就完全好了,读取bitmap用的也是 decodeStream()

所以这可以算个解决方案,等Android N 忽略这个requestLegacyExternalStorage 属性的时候,我相信华为在 android N应该解决了这个bug

这个bug太恶心, 预览图片,播放视频都有影响。

这个问题有哪位大佬解决了的,我这边的情况是,一会可以预览,一会又不能预览,有时候加载图片很慢,有时候预览图片直接应用就崩溃到桌面了,没有看到崩溃日志

这个问题有哪位大佬解决了的,我这边的情况是,一会可以预览,一会又不能预览,有时候加载图片很慢,有时候预览图片直接应用就崩溃到桌面了,没有看到崩溃日志

遇到的问题跟你一样,时有时无的,而且一旦遇到没有任何日志。

图片加载不出来我用这个方式可以解决问题
Glide.with(getContext())
.asBitmap()
.load(mMedia.getContentUri())
.placeholder(mPreBindInfo.mPlaceholder)
.override(mPreBindInfo.mResize, mPreBindInfo.mResize)
.centerCrop()
.skipMemoryCache(true)
.into(new SimpleTarget() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) {
mThumbnail.setImageBitmap(resource);
}
});
加载图片成功后,再手动设置bitmap

貌似这不是华为问题,这个是所有 android 10 问题

貌似这不是华为问题,这个是所有 android 10 问题

应该师是吧oppo最新款的手机也出现了这种问题

貌似这不是华为问题,这个是所有 android 10 问题

应该师是吧oppo最新款的手机也出现了这种问题

你们有什么解决方案吗?

这个问题根本原因是 content provider, 如果url用传统的 file://, 就没问题。 如果用 content:// 就会出现,不仅是bitmap,mediaplayer setdatasource, 也会出现。

貌似这不是华为问题,这个是所有 android 10 问题

所有上报android10相关相册选择bug都是华为没有其他手机上报

【反馈 bug】 请各位造轮子的大大,有空帮忙解决一哈。 感谢了~

设备名称:Honor Magic 2
型号: TNY-AL00
Android 版本:10
Magic UI版本:3.0.0

编译配置:
compileSdkVersion 29
targetSdkVersion 29
multiDexEnabled true

在matisse 的 demo 操作步骤:
1、 点击 Dracula
2、在图片选择界面,不点击checkBox,而是点击 图片内容本身来查看大图
3、查看大图页面黑屏,10秒后系统弹框 “Matisse无响应。是否将其关闭?”

2781576481530_ pic_hd

【反馈 bug】 请各位造轮子的大大,有空帮忙解决一哈。 感谢了~

设备名称:Honor Magic 2

型号: TNY-AL00

Android 版本:10

Magic UI版本:3.0.0

编译配置:

compileSdkVersion 29

targetSdkVersion 29

multiDexEnabled true

在matisse 的 demo 操作步骤:

1、 点击 Dracula

2、在图片选择界面,不点击checkBox,而是点击 图片内容本身来查看大图

3、查看大图页面黑屏,10秒后系统弹框 “Matisse无响应。是否将其关闭?”

2781576481530_ pic_hd

这玩意解决不了的。华为的系统Bitmap api出现的anr。跟华为的智能分辨率有关。他们修过,然后又会在未来新版本又引入,反复很多次了。

解决方法就两,不上架play用 file:// 加载,上架就用华为系统的gallary 去选择,以方便遵守scope storage

我的是华为mate30手机,同样遇到相册加载列表很慢,打开预览图黑屏卡死问题,试了很多方式,最终还是无奈通过修改图片质量解决的。我修改了GlideEngine中的四个glide加载配置,加上.format(DecodeFormat.PREFER_RGB_565),基本上秒开了

Was this page helpful?
0 / 5 - 0 ratings

Related issues

cv0cv0 picture cv0cv0  ·  7Comments

hugoFather picture hugoFather  ·  5Comments

souragar picture souragar  ·  4Comments

GTooo picture GTooo  ·  6Comments

Mahan3340 picture Mahan3340  ·  4Comments