android.app.ActivityThread.performLaunchActivity 的 java.lang.RuntimeException

Posted

技术标签:

【中文标题】android.app.ActivityThread.performLaunchActivity 的 java.lang.RuntimeException【英文标题】:java.lang.RuntimeException at android.app.ActivityThread.performLaunchActivity 【发布时间】:2019-05-27 23:11:50 【问题描述】:

从 Google Play 管理中心, java.lang.RuntimeException 发生时没有“Caused by:

以下日志是从 Google Play 控制台崩溃日志中复制的。 适用于:android 8.0、Android 8.1、Android 7.0、Android 7.1

java.lang.RuntimeException: 
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2955)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3030)
  at android.app.ActivityThread.-wrap11 (Unknown Source)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1696)
  at android.os.Handler.dispatchMessage (Handler.java:105)
  at android.os.Looper.loop (Looper.java:164)
  at android.app.ActivityThread.main (ActivityThread.java:6938)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)

请帮我解决这个问题!

【问题讨论】:

能否请您提供导致错误的活动代码? 每 140,000 个单元在数十个终端上发生。 不知道是哪个活动。 RunTimeException: <BR>... 不确定它指的是什么<BR>... 任何提及该标签的活动/XML? @San Moohak,您可以从崩溃的“ANR 和崩溃”页面的“标题”中找到导致的类名称。 【参考方案1】:

ActivityThread.java 表示它是 updatePendingConfiguration() 或 registerOnActivityPausedListener(),因此它要么因 .onPause() 而失败,要么无法使用正确的参数调用 super() 方法 - 或者正在应用的 Configuration 有问题.

我很乐意解释如何解决该问题,但该问题缺少引发异常的代码。解决这个问题的最好方法可能是使用类似Firebase Crashlytics 的东西,这样人们就可以看到它的确切来源以及受影响的设备(如果这应该是具体的)。我几乎怀疑这可能是由于使用应用程序的Context 启动Activity 而没有设置标志Intent.FLAG_ACTIVITY_NEW_TASK 引起的(请参阅:this answer)。

【讨论】:

【参考方案2】:

通过分析日志可以做出以下假设,

在任何外部库中都会引发异常 项目中使用

解释: 基本上,异常是由ActivityThread.java 抛出的,更具体地说,2955 行的performLaunchActivity() 方法抛出了异常。由于堆栈跟踪不包括您的应用程序的任何 internal class,我们可以假设异常是在 external class 附带的您在项目中使用的库。

如果是这种情况,可以执行以下解决方法来解决这个问题 -

查看所有库依赖项和 Markdown 可疑项 如果您使用来自外部库的自定义视图(例如 AdView),则该库最有可能导致此崩溃 将所有 3rd 方库升级到最新版本,因为崩溃是在最新的操作系统中引起的 查看官方文档以正确实现这些库。像,SDK 网站的疑难解答页面可能有解决这个确切问题的方法。比如,Dynamsoft Camera SDK 已经解决了这个问题 here

查看该问题的库的问题跟踪器。例如,Android-Permission 库的 closed issue 具有完全相同的日志。

如果你的项目是react native,那么关于它的讨论会很长here

建议:我想在@Martin Zeitler 使用Crashlytics 的建议中再添加几行。

我推荐你Customize your Firebase Crashlytics crash reports。因为,有时仅堆栈跟踪不足以重现 碰撞。

通过使用自定义功能,您将能够获得,

用户身份

应用状态

崩溃前发生的事件

这肯定会帮助您重新生成崩溃并修复它。

【讨论】:

【参考方案3】:

简介

对于人们说:

did you resolve this issue? It's a rising crash in my app as well – Bao Le Feb 6 at 8:36 
did anybody resolve this issue? – AwaisMajeed Feb 9 at 13:15 
Also happening to me. =( – masterlopau Feb 26 at 1:51
do this solved? – Vengat Jul 19 at 5:55 

有额外的cause日志吗?这将有很大帮助。

这是您的崩溃日志:

java.lang.RuntimeException: 
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2955)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3030)
  at android.app.ActivityThread.-wrap11 (Unknown Source)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1696)
  at android.os.Handler.dispatchMessage (Handler.java:105)
  at android.os.Looper.loop (Looper.java:164)
  at android.app.ActivityThread.main (ActivityThread.java:6938)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)

与此崩溃日志比较(相同的行号和代码流):

java.lang.RuntimeException: 
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2955)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3030)
  at android.app.ActivityThread.-wrap11 (Unknown Source)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1696)
  at android.os.Handler.dispatchMessage (Handler.java:105)
  at android.os.Looper.loop (Looper.java:164)
  at android.app.ActivityThread.main (ActivityThread.java:6938)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)

这一行不同:

  at java.lang.reflect.Method.invoke (Method.java)

和:

  at java.lang.reflect.Constructor.newInstance0 (Native Method)

带有额外原因日志:

Caused by: android.support.v4.app.i$b: 
  at android.support.v4.app.i.instantiate (Fragment.java:386)
  at android.support.v4.app.k.a (FragmentContainer.java:33)
  at android.support.v4.app.s.a (FragmentState.java:79)
  at android.support.v4.app.o.a (FragmentManager.java:3080)
  at android.support.v4.app.l.a (FragmentController.java:152)
  at android.support.v4.app.j.onCreate (FragmentActivity.java:330)
  at host.exp.exponent.experience.f.onCreate (ReactNativeActivity.java:140)
  at host.exp.exponent.experience.a.onCreate (BaseExperienceActivity.java:79)
  at host.exp.exponent.experience.ExperienceActivity.onCreate (ExperienceActivity.java:160)
  at host.exp.exponent.experience.ShellAppActivity.onCreate (ShellAppActivity.java:22)
  at android.app.Activity.performCreate (Activity.java:7174)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1220)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2908)
Caused by: java.lang.reflect.InvocationTargetException: 
  at java.lang.reflect.Constructor.newInstance0 (Native Method)
  at java.lang.reflect.Constructor.newInstance (Constructor.java:334)
  at android.support.v4.app.i.instantiate (Fragment.java:364)
Caused by: java.lang.IllegalStateException: 
  at abi30_0_0.host.exp.exponent.modules.api.screens.Screen$ScreenFragment.<init> (Screen.java:19)

注意android.support.v4.app 行。

见Android standalone app randomly crashes on app open

修复

android.support 类包,或有 *Compat 后缀

(1)AndroidX

(i) 这个问题有很多原因来自我的互联网搜索。一个常见的原因似乎是使用了android.support class packages,或者使用了*Compat suffix审查你的build.gradle文件android.support.v4等...

(ii) 因为有时它不会发生在测试中,我猜只有部署 android.support.v4 等...在某些设备或 API 上使用有问题的设备库。

注意:随着Android 9.0 (API level 28) 的发布,有一个新的 称为 AndroidX 的支持库版本,它是 喷气背包。 AndroidX 库包含现有的支持库 并且还包括最新的Jetpack 组件。

您可以继续使用支持库。历史文物 (那些版本为27 及更早版本,并打包为android.support.*) 将在Google Maven 上保持可用。但是,所有新图书馆 开发将在AndroidX 库中进行。

我们建议在所有新项目中使用 AndroidX 库。你 还应该考虑将现有项目迁移到AndroidX。 Support Library Setup

现在可以通过Google's Maven 获得支持库 存储库。我们不再支持通过 SDK Manager,并且该功能将很快被删除..

注意:在您的应用程序项目中包含支持库后, 我们强烈建议您缩小混淆优化您的 应用程序发布。除了保护您的源代码 混淆,缩小从您的任何库中删除未使用的类 包含在您的应用程序中,这会保持您的下载大小 应用程序尽可能小。

注意:如果您包含多个支持库,最低 SDK 版本必须是任何指定的要求的最高版本 图书馆。例如,如果您的应用同时包含 v14 Preference 支持库和 v17 Leanback 库,您的最低 SDK 版本 必须是 17 或更高版本。

另见:

Support Library Packages

features

(2) 反应原生屏幕

它与 react-native-screens 相关,它们有解决方法 这个问题,请看:

Android crashes nondeterministically when restoring from background - veedeo。

【讨论】:

【参考方案4】:

这种崩溃可能发生在任何事情上。我遇到了同样的问题,根本原因是在被覆盖的Fragment#onViewCreated 中错误实现的Comparator 抛出了IllegalArgumentException。片段本身是在AppCompatActivity#onCreate 期间通过FragmentManager 添加的。

2020-01-03 15:38:33.001 7860-7860/com.example.app E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.app, PID: 7860
    java.lang.RuntimeException: Unable to start activity ComponentInfocom.example.app/MyActivity: android.view.InflateException: Binary XML file line #9 in com.example.app:layout/my_activity: Binary XML file line #9 in com.example.app:layout/my_activity: Error inflating class fragment
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: android.view.InflateException: Binary XML file line #9 in com.example.app:layout/my_activity: Binary XML file line #9 in com.example.app:layout/my_activity: Error inflating class fragment
     Caused by: android.view.InflateException: Binary XML file line #9 in com.example.app:layout/my_activity: Error inflating class fragment
     Caused by: java.lang.IllegalArgumentException: Comparison method violates its general contract!
        at java.util.TimSort.mergeLo(TimSort.java:777)
        at java.util.TimSort.mergeAt(TimSort.java:514)
        at java.util.TimSort.mergeCollapse(TimSort.java:441)
        at java.util.TimSort.sort(TimSort.java:245)
        at java.util.Arrays.sort(Arrays.java:1492)
        at java.util.ArrayList.sort(ArrayList.java:1470)
        at java.util.Collections.sort(Collections.java:206)
        at com.example.app.MyFragment.onViewCreated(MyFragment.java:188)
        at androidx.fragment.app.FragmentManagerImpl.ensureInflatedFragmentView(FragmentManagerImpl.java:1144)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:851)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1133)
        at androidx.fragment.app.FragmentManagerImpl.addFragment(FragmentManagerImpl.java:1393)
        at androidx.fragment.app.FragmentManagerImpl.onCreateView(FragmentManagerImpl.java:3205)
        at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:134)
        at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:357)
        at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:336)
        at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1069)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:997)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:656)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
2020-01-03 15:38:33.003 7860-7860/com.example.app E/AndroidRuntime:     at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)

当然,如果您仅从 Google Play 管理中心获得崩溃报告,几乎不可能找到根本原因。我很幸运遇到了客户事件,让我了解了在哪里查看以及如何重现崩溃。您也可以切换到自定义崩溃报告工具(如 HockeyApp 或 Firebase)来查看整个堆栈跟踪。

【讨论】:

【参考方案5】:

将反混淆 (mapping.txt) 文件上传到 Google Playstore。 阅读以下文档,了解如何生成和上传。

https://support.google.com/googleplay/android-developer/answer/9848633?hl=en

【讨论】:

【参考方案6】:

我遇到了同样的错误。我解决了,也许对某些人有帮助:

问题出在我的土地/toolbar.xml 中。我已迁移到 Androidx 库。我解决了更改有问题的 xml 文件的问题。

请勿使用:

<android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_
        android:layout_
        android:fitsSystemWindows="true">
....
....


</android.support.v4.widget.DrawerLayout>

改为使用:

<androidx.drawerlayout.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_
        android:layout_
        android:fitsSystemWindows="true">
....
....


</androidx.drawerlayout.widget.DrawerLayout>

【讨论】:

这甚至不应该编译,因此这似乎不太可能。 @MartinZeitler 可能是因为我在纵向 smarpthones 中尝试过而编译的。(因为 land/toolbar.xml 有问题)此外,我在测试时没有旋转智能手机.结果,我的 portrait 手机似乎没有问题,但是当我查看 Dev Console 时,我看到了数千个错误。最后,解决办法是这样的。 @gurkanstack 正如你所描述的那样,linter 应该警告“布局不一致”......以及抛出ClassNotDefException,这肯定会破坏构建(除非提供两个依赖项,没有启用了喷射器)。 @gurkanstack 我希望我关于更新所有库并通过阅读官方文档正确实施它们的建议能够帮助您解决这个问题。我还通过添加有关自定义 crashlytics 的建议来更新我的答案,以便您将来可以处理此类问题。

以上是关于android.app.ActivityThread.performLaunchActivity 的 java.lang.RuntimeException的主要内容,如果未能解决你的问题,请参考以下文章