简体   繁体   English

Android启动画面仅在某些设备上崩溃

[英]Android splash screen keeps crashing on some devices only

I am almost new to Android. 我几乎刚接触Android。 I add splash screen to the app with code from this site as follows: 我使用来自此站点的代码向应用程序添加启动屏幕,如下所示:

  1. creating drawable file for splash 创建用于飞溅的可绘制文件
  2. creating theme in styles for splash 以飞溅的样式创建主题
  3. applying the theme on home screen 在主屏幕上应用主题

styles.xml styles.xml

    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
       <item name="android:windowBackground">@drawable/splash_background</item>
    </style>

splash_background.xml splash_background.xml

    <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/splash"/>
    <item>
        <bitmap android:gravity="center" android:src="@drawable/ib_logo" />
    </item>
</layer-list>
</xml>

applying the the splash them on home screan in Android Manifest 将飞溅内容应用到Android Manifest中的家用屏幕上

    <activity android:name=".main.MainActivity"
    android:launchMode="singleInstance"
    android:theme="@style/SplashTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
   </activity>

That works fine on my test devices and even on the versions of the app I install from play store and works on all emulators but I get crash reports from users on different Android versions and different mobile makers with this part of the crash report: 在我的测试设备上,甚至在我从Play商店安装的应用程序版本上,它都可以正常运行,并且可以在所有模拟器上运行,但是通过崩溃报告的这一部分,我从不同Android版本和不同移动制造商的用户那里获得崩溃报告:

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mypackage/com.mypackage.main.MainActivity}: android.content.res.Resources$NotFoundException: Drawable com.mypackage:drawable/splash_background with resource ID #0x7f0800d7
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2974)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3059)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1724)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:7000)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
Caused by: android.content.res.Resources$NotFoundException: Drawable com.mypackage:drawable/splash_background with resource ID #0x7f0800d7
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/splash_background.xml from drawable resource ID #0x7f0800d7
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:870)
at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:680)
at android.content.res.Resources.getDrawableForDensity(Resources.java:892)
at android.content.res.Resources.getDrawable(Resources.java:834)
at android.content.Context.getDrawable(Context.java:605)
at androidx.core.content.ContextCompat.getDrawable(ContextCompat.java:454)
at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:144)
at androidx.appcompat.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:411)
at androidx.appcompat.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:86)
at androidx.appcompat.app.AppCompatDelegateImpl.attachToWindow(AppCompatDelegateImpl.java:637)
at androidx.appcompat.app.AppCompatDelegateImpl.ensureWindow(AppCompatDelegateImpl.java:613)
at androidx.appcompat.app.AppCompatDelegateImpl.onCreate(AppCompatDelegateImpl.java:340)
at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:105)
at com.mypackage.base.BaseActivity.onCreate(BaseActivity.kt:35)
at com.mypackage.main.MainActivity.onCreate(MainActivity.kt:56)
at android.app.Activity.performCreate(Activity.java:7258)
at android.app.Activity.performCreate(Activity.java:7249)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1221)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3059)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1724)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:7000)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.InputStream.close()' on a null object reference
at android.graphics.drawable.DrawableInflater.inflateSpr(DrawableInflater.java:253)
at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:138)
at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1322)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1311)
at android.graphics.drawable.LayerDrawable.inflateLayers(LayerDrawable.java:284)
at android.graphics.drawable.LayerDrawable.inflate(LayerDrawable.java:194)
at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:146)
at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1322)
at android.graphics.drawable.Drawable.createFromXmlForDensity(Drawable.java:1281)
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:857)
... 27 more
android.content.res.Resources$NotFoundException: Drawable com.mypackage:drawable/splash_background with resource ID #0x7f0800d7
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/splash_background.xml from drawable resource ID #0x7f0800d7
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:870)
at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:680)
at android.content.res.Resources.getDrawableForDensity(Resources.java:892)
at android.content.res.Resources.getDrawable(Resources.java:834)
at android.content.Context.getDrawable(Context.java:605)
at androidx.core.content.ContextCompat.getDrawable(ContextCompat.java:454)
at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:144)
at androidx.appcompat.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:411)
at androidx.appcompat.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:86)
at androidx.appcompat.app.AppCompatDelegateImpl.attachToWindow(AppCompatDelegateImpl.java:637)
at androidx.appcompat.app.AppCompatDelegateImpl.ensureWindow(AppCompatDelegateImpl.java:613)
at androidx.appcompat.app.AppCompatDelegateImpl.onCreate(AppCompatDelegateImpl.java:340)
at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:105)
at com.mypackage.base.BaseActivity.onCreate(BaseActivity.kt:35)
at com.mypackage.main.MainActivity.onCreate(MainActivity.kt:56)
at android.app.Activity.performCreate(Activity.java:7258)
at android.app.Activity.performCreate(Activity.java:7249)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1221)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3059)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1724)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:7000)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.InputStream.close()' on a null object reference
at android.graphics.drawable.DrawableInflater.inflateSpr(DrawableInflater.java:253)
at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:138)
at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1322)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1311)
at android.graphics.drawable.LayerDrawable.inflateLayers(LayerDrawable.java:284)
at android.graphics.drawable.LayerDrawable.inflate(LayerDrawable.java:194)
at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:146)
at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1322)
at android.graphics.drawable.Drawable.createFromXmlForDensity(Drawable.java:1281)
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:857)
... 27 more
android.content.res.Resources$NotFoundException: File res/drawable/splash_background.xml from drawable resource ID #0x7f0800d7
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:870)
at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:680)
at android.content.res.Resources.getDrawableForDensity(Resources.java:892)
at android.content.res.Resources.getDrawable(Resources.java:834)
at android.content.Context.getDrawable(Context.java:605)
at androidx.core.content.ContextCompat.getDrawable(ContextCompat.java:454)
at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:144)
at androidx.appcompat.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:411)
at androidx.appcompat.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:86)
at androidx.appcompat.app.AppCompatDelegateImpl.attachToWindow(AppCompatDelegateImpl.java:637)
at androidx.appcompat.app.AppCompatDelegateImpl.ensureWindow(AppCompatDelegateImpl.java:613)
at androidx.appcompat.app.AppCompatDelegateImpl.onCreate(AppCompatDelegateImpl.java:340)
at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:105)
at com.mypackage.base.BaseActivity.onCreate(BaseActivity.kt:35)
at com.mypackage.main.MainActivity.onCreate(MainActivity.kt:56)
at android.app.Activity.performCreate(Activity.java:7258)
at android.app.Activity.performCreate(Activity.java:7249)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1221)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3059)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1724)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:7000)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.InputStream.close()' on a null object reference
at android.graphics.drawable.DrawableInflater.inflateSpr(DrawableInflater.java:253)
at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:138)
at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1322)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1311)
at android.graphics.drawable.LayerDrawable.inflateLayers(LayerDrawable.java:284)
at android.graphics.drawable.LayerDrawable.inflate(LayerDrawable.java:194)
at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:146)
at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1322)
at android.graphics.drawable.Drawable.createFromXmlForDensity(Drawable.java:1281)
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:857)
... 27 more
java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.InputStream.close()' on a null object reference
at android.graphics.drawable.DrawableInflater.inflateSpr(DrawableInflater.java:253)
at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:138)
at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1322)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1311)
at android.graphics.drawable.LayerDrawable.inflateLayers(LayerDrawable.java:284)
at android.graphics.drawable.LayerDrawable.inflate(LayerDrawable.java:194)
at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:146)
at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1322)
at android.graphics.drawable.Drawable.createFromXmlForDensity(Drawable.java:1281)
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:857)
at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:680)
at android.content.res.Resources.getDrawableForDensity(Resources.java:892)
at android.content.res.Resources.getDrawable(Resources.java:834)
at android.content.Context.getDrawable(Context.java:605)
at androidx.core.content.ContextCompat.getDrawable(ContextCompat.java:454)
at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:144)
at androidx.appcompat.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:411)
at androidx.appcompat.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:86)
at androidx.appcompat.app.AppCompatDelegateImpl.attachToWindow(AppCompatDelegateImpl.java:637)
at androidx.appcompat.app.AppCompatDelegateImpl.ensureWindow(AppCompatDelegateImpl.java:613)
at androidx.appcompat.app.AppCompatDelegateImpl.onCreate(AppCompatDelegateImpl.java:340)
at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:105)
at com.mypackage.base.BaseActivity.onCreate(BaseActivity.kt:35)
at com.mypackage.main.MainActivity.onCreate(MainActivity.kt:56)
at android.app.Activity.performCreate(Activity.java:7258)
at android.app.Activity.performCreate(Activity.java:7249)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1221)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3059)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1724)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:7000)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

why do I get resource not found for the splash xml file even it exists. 为什么我没有找到飞溅XML文件的资源,即使它存在。

This is the mobile device I got this crash report on: 这是我收到此崩溃报告的移动设备:

Samsung Galaxy J7 Core SM-J701F specifications:

    – 5.5 Inch (720 x 1280 pixels (HD)) Super AMOLED capacitive touchscreen, Scratch Resistant (2.5D Curved Glass)
    – 1.6 GHz Octa Core Exynos (7870) CPU with Mali T830 GPU.
    – 2 GB RAM and 16 GB internal storage.

Oct 16, 2017
Samsung Galaxy J7 Core SM-J701F Specifications - GSM-specs.com
https://www.gsm-specs.com/specifications/samsung-galaxy-j7-core-sm-j701f/

This is my res folder and all files exists in the "drawable" folder. 这是我的res文件夹,所有文件都存在于“ drawable”文件夹中。

在此处输入图片说明

Edit : If the crashes are from older devices then its because you are using vector drawables. 编辑 :如果崩溃是从较旧的设备,那么它是因为您正在使用矢量可绘制对象。 Vector files need to be referenced with android:srcCompat rather than android:src for backward compatibility. 为了向后兼容,必须使用android:srcCompat而不是android:src引用矢量文件。

Old Answer: (May work for some) 旧答案:(可能对某些人有用)
This could be happening because you have different drawable folders for different Android versions and you did not include your splash_background drawable in your drawable folder. 发生这种情况的原因是,对于不同的Android版本,您具有不同的drawable文件夹,并且您的drawable文件夹中没有包含splash_background drawable。 Go to your res folder in your app module, it might look like this: 转到应用模块中的res文件夹,它可能如下所示:

在此处输入图片说明

Now make sure that your background is in drawable folder as well and you are good to go. 现在确保您的背景也位于drawable文件夹中,并且一切顺利。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM