java.lang.IllegalStateException: at android.os.Parcel.readEx



我在我的Android Vitals:中看到了这个异常

java.lang.RuntimeException: 
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3303)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3411)
at android.app.ActivityThread.-wrap12 (Unknown Source)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1994)
at android.os.Handler.dispatchMessage (Handler.java:108)
at android.os.Looper.loop (Looper.java:166)
at android.app.ActivityThread.main (ActivityThread.java:7529)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:245)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:921)
Caused by: java.lang.IllegalStateException: 
at android.os.Parcel.readException (Parcel.java:1962)
at android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.java:183)
at android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.java:135)
at android.content.ContentProviderProxy.call (ContentProviderProxy.java:651)
at android.provider.Settings$NameValueCache.getStringForUser (Settings.java:1996)
at android.provider.Settings$Global.getStringForUser (Settings.java:10437)
at android.provider.Settings$Global.getString (Settings.java:10426)
at android.provider.Settings$Global.getInt (Settings.java:10608)
at com.android.internal.policy.PhoneWindow.<init> (PhoneWindow.java:385)
at com.android.internal.policy.HwPhoneWindow.<init> (HwPhoneWindow.java:91)
at com.android.internal.policy.HwPolicyFactoryImpl.getHwPhoneWindow (HwPolicyFactoryImpl.java:49)
at com.android.internal.policy.HwPolicyFactory.getHwPhoneWindow (HwPolicyFactory.java:50)
at android.app.Activity.attach (Activity.java:7314)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3233)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3411)
at android.app.ActivityThread.-wrap12 (Unknown Source)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1994)
at android.os.Handler.dispatchMessage (Handler.java:108)
at android.os.Looper.loop (Looper.java:166)
at android.app.ActivityThread.main (ActivityThread.java:7529)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:245)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:921)

如何找出原因,因为它没有引用我的任何代码?

唯一的大变化是,我将.m4a文件添加到RAW资源文件夹中,并将其与SoundPool一起使用。我猜这与此有关,并且在应用程序发布时会间歇性崩溃。

搜索后,我发现这个添加到我的build.gradle文件中:

aaptOptions {
noCompress "mp3"
}

我添加了这个,用mp3代替了m4a。还是应该是aac?也许我最好使用.wav文件吗?谢谢

编辑:以下内容提供了更多信息,即找不到资源文件。然而,大多数时候我运行的应用程序都是可以的。

java.lang.RuntimeException: 
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3303)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3411)
at android.app.ActivityThread.-wrap12 (Unknown Source)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1994)
at android.os.Handler.dispatchMessage (Handler.java:108)
at android.os.Looper.loop (Looper.java:166)
at android.app.ActivityThread.main (ActivityThread.java:7529)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:245)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:921)
Caused by: android.content.res.Resources$NotFoundException: 
at android.content.res.ResourcesImpl.openRawResourceFd (ResourcesImpl.java:380)
at android.content.res.Resources.openRawResourceFd (Resources.java:1443)
at android.media.SoundPool.load (SoundPool.java:235)
at [appname].GlobalVariables.getSoundPool (GlobalVariables.java:553)
at [appname].MainActivity.onCreate (MainActivity.java:85)
at android.app.Activity.performCreate (Activity.java:7383)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1218)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3256)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3411)
at android.app.ActivityThread.-wrap12 (Unknown Source)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1994)
at android.os.Handler.dispatchMessage (Handler.java:108)
at android.os.Looper.loop (Looper.java:166)
at android.app.ActivityThread.main (ActivityThread.java:7529)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:245)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:921)
Caused by: java.io.FileNotFoundException: 
at android.content.res.AssetManager.openNonAssetFdNative (AssetManager.java)
at android.content.res.AssetManager.openNonAssetFd (AssetManager.java:803)
at android.content.res.ResourcesImpl.openRawResourceFd (ResourcesImpl.java:378)
at android.content.res.Resources.openRawResourceFd (Resources.java:1443)
at android.media.SoundPool.load (SoundPool.java:235)
at [appname].GlobalVariables.getSoundPool (GlobalVariables.java:553)
at [appname].MainActivity.onCreate (MainActivity.java:85)
at android.app.Activity.performCreate (Activity.java:7383)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1218)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3256)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3411)
at android.app.ActivityThread.-wrap12 (Unknown Source)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1994)
at android.os.Handler.dispatchMessage (Handler.java:108)
at android.os.Looper.loop (Looper.java:166)
at android.app.ActivityThread.main (ActivityThread.java:7529)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:245)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:921)

它看起来像是一个影响应用程序安装后首次运行的平台错误。操作系统在提取所有apk内容之前启动应用程序,因此会遇到丢失的资源。由于外部存储的工作负载不同(取决于一次有多少进程在使用它(,这种情况可能会间歇性发生。你可能会注意到启动屏幕可绘制内容也有同样的行为,尤其是当它们很大时(当你第一次运行应用程序时,你会在启动图像出现之前看到更长时间的白/黑屏幕,而设备正在打开文件(。

最快的解决方法是延迟加载资源,直到它准备好(通过使用异常处理重复检查(。

如果这不是一个选项,您可以尝试将资源转换为资产(java/…/res/raw->/assets(,这可能会将其推到解包队列的前面,并使其更快地可用于应用程序。然而,不能保证这会起作用(一直(。

最后的办法是将声音文件(如果它们不是太大的话(作为字节数组存储在代码/类中(但这很难看(。这将确保数据与代码同时加载,早在执行之前。

最新更新