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学习专栏

未经允许不得转载

相关推荐
2501_9462309836 分钟前
Cordova&OpenHarmony外观主题设置
android·javascript
小韩博1 小时前
小迪之盲注第44课
android·网络安全·adb
夏沫琅琊2 小时前
Android TestDPC 工程详解
android
键来大师2 小时前
Android16 AP热点修改默认密码为12345678
android·framework·rk3576·android16
李坤林3 小时前
Android KGI (Generic Kernel Image)
android
十二测试录3 小时前
Android和iOS测试区别
android·经验分享·ios·职场发展·ab测试
柒许宁安3 小时前
在 Cursor 中运行 Android 项目指南
android·java·个人开发
技术小甜甜3 小时前
【Godot】【入门】GDScript 快速上手(只讲游戏里最常用的 20% 语法)
android·游戏·编辑器·游戏引擎·godot
aqi003 小时前
FFmpeg开发笔记(九十五)国产的开源视频美颜工具VideoEditorForAndroid
android·ffmpeg·音视频·直播·流媒体
sanggou4 小时前
基于Java实现的简易规则引擎(日常开发难点记录)
android·java