bitmap requires a valid src attribute

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。

专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。

未经允许不得转载

目录

一、导读

我们继续总结学习遇到的问题,温故知新。

今天遇到一个线上问题,启动就闪退,比较坑,在此做一个记录,防止掉坑。

二、概览

我们在启动时做了一个启动图的优化,启动时让用户看到公司的logo,同时解决黑屏、白屏问题,这时也给用户一个假象,感觉启动起来很快一样。

但是上线后包了一些错误, 如下:

java 复制代码
java.lang.RuntimeException:Unable to start activity ComponentInfo{com.qxx/com.qxx.Activity}: android.view.InflateException: Binary XML file line #9: Error inflating class <unknown>
2
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:26913)

Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #51: <bitmap> requires a valid src attribute
java 复制代码
java.lang.RuntimeException:Unable to start activity ComponentInfo{com.xx/com.xx.Activity}: android.content.res.Resources$NotFoundException: File res/xyadx.xml from drawable resource ID #xxxx
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:25211)
......
Caused by:
org.xmlpull.v1.XmlPullParserException:Binary XML file line #91: <bitmap> requires a valid src attribute
java 复制代码
# main(1)

org.xmlpull.v1.XmlPullParserException

Binary XML file line #9: <bitmap> requires a valid 'src' attribute

java.lang.RuntimeException:Unable to start activity ComponentInfo{com.xxx/com.xxxActivity}: android.content.res.Resources$NotFoundException: Drawable com.xxx:drawable/loading_bg with resource ID #0x7xxf2
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:27681)
......
Caused by:
org.xmlpull.v1.XmlPullParserException:Binary XML file line #19: <bitmap> requires a valid 'src' attribute

三、问题记录

配置上中下三个image,再配个背景,更显高大上,

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    全局背景
    <item>
        <color android:color="#FFFFFF" />
    </item>

     配置上中下三个image
    <item>
        <bitmap
            android:gravity="top"
            android:src="@drawable/loading_bg" />
    </item>
    <item
        android:bottom="@dimen/dp_10">
        <bitmap
            android:gravity="center"
            android:src="@drawable/loading_slogan" />
    </item>
    <item>
        <bitmap
            android:gravity="bottom"
            android:src="@drawable/loading_buttom_logo" />
    </item>
</layer-list>

我们一起看看源码报错的地方 BitmapDrawable.java

java 复制代码
    /**
     * Updates the constant state from the values in the typed array.
     */
    private void updateStateFromTypedArray(TypedArray a, int srcDensityOverride)
            throws XmlPullParserException {
        final Resources r = a.getResources();
        final BitmapState state = mBitmapState;

        final int srcResId = a.getResourceId(R.styleable.BitmapDrawable_src, 0);
        if (srcResId != 0) {
            
            ...

            一系列的操作后,根据resid去获取bitmap,如果bitmap为空,则会抛出异常
            Bitmap bitmap = null;
            try (InputStream is = r.openRawResource(srcResId, value)) {
                ImageDecoder.Source source = ImageDecoder.createSource(r, is, density);
                bitmap = ImageDecoder.decodeBitmap(source, (decoder, info, src) -> {
                    decoder.setAllocator(ImageDecoder.ALLOCATOR_SOFTWARE);
                });
            } catch (Exception e) {
            }

            if (bitmap == null) {
                throw new XmlPullParserException(a.getPositionDescription() +
                        ": <bitmap> requires a valid 'src' attribute");
            }

        }

        ...
    }

一系列的操作后,根据resid去获取bitmap,如果bitmap为空,则会抛出异常,

分析原因后,我们得出结论

  1. bitmap 使用 src来引用, android:src
  2. 的src不允许为xml drawables
  3. src引用的图片资源在多分辨率下都要有,不让容易出问题

四、 推荐阅读

Java 专栏

SQL 专栏

数据结构与算法

Android学习专栏

未经允许不得转载

相关推荐
Doro再努力6 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
Daniel李华6 小时前
echarts使用案例
android·javascript·echarts
做人不要太理性7 小时前
CANN Runtime 运行时组件深度解析:任务调度机制、存储管理策略与维测体系构建逻辑
android·运维·魔珐星云
我命由我123457 小时前
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
android·java·开发语言·java-ee·android studio·android-studio·android runtime
朗迹 - 张伟8 小时前
Tauri2 导出 Android 详细教程
android
lpruoyu8 小时前
【Android第一行代码学习笔记】Android架构_四大组件_权限_持久化_通知_异步_服务
android·笔记·学习
独自破碎E9 小时前
【BISHI15】小红的夹吃棋
android·java·开发语言
李堇12 小时前
android滚动列表VerticalRollingTextView
android·java
lxysbly14 小时前
n64模拟器安卓版带金手指2026
android
游戏开发爱好者817 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview