【问题标题】:android overriding onCreate methodandroid覆盖onCreate方法
【发布时间】:2020-02-06 08:14:12
【问题描述】:

在向 android 创建 Activity 时,我们必须重写 onCreate 方法,并且新方法必须调用 super.onCreate

我的问题是它是否需要成为新 onCreate 的 first 语句?

我有一个小框架,可以在我的活动中注入一些代码......它运行良好,没有出现重大问题

然后我进行了一些更改以解决小问题,并将super.onCreate() 的调用从第一个语句切换到最后一个语句......

现在一些用户正在获得

Caused by java.util.ConcurrentModificationException
       at androidx.collection.SimpleArrayMap.put(SimpleArrayMap.java:482)
       at com.google.android.gms.measurement.internal.zzin.zza(zzin.java:108)
       at com.google.android.gms.measurement.internal.zzid.onActivityCreated(zzid.java:11)
       at android.app.Application.dispatchActivityCreated(Application.java:221)
       at android.app.Activity.onCreate(Activity.java:1071)
       at androidx.core.app.ComponentActivity.onCreate(ComponentActivity.java:81)
       at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:154)
       at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:312)
       at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:106)
       at com.tomatedigital.adinjector.AdsAppCompatActivity.onCreate(AdsAppCompatActivity.java:253)
       at com.tomatedigital.giveawaymaster.activity.BaseActivity.onCreate(BaseActivity.java:132)
       at com.tomatedigital.giveawaymaster.activity.MainActivity.onCreate(MainActivity.java:623)
       at android.app.Activity.performCreate(Activity.java:7258)
       at android.app.Activity.performCreate(Activity.java:7249)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1222)

该应用正在生产中,每天有超过 5000 名用户,但我无法在开发中复制错误...

有谁知道可能是什么

【问题讨论】:

  • 请添加调试支持代码
  • 这是一个线程问题 - 您需要提供一些代码,以便人们可以在这里为您提供帮助。
  • @ligi,我知道这是一个并发问题,但我的代码有零线程创建或操作,正如您从堆栈跟踪中看到的那样,异常发生在一个 googles api 内部......我的问题是与...有关“super.onCreate() 是否会转换任何重要的标志,必须是 android 活动的第一条语句?”
  • 不,不应该,因为我试过了,没有崩溃

标签: android oncreate


【解决方案1】:

根据日志和我的理解...

super.onCreate() 最后调用不是崩溃的主要原因。

此错误是您的 HashMap(您已采用)中并发修改的原因,并且多个线程正在尝试访问和编辑该 HashMap。

因为……

HashMap 不同步。它不是线程安全的,如果没有适当的同步代码,就不能在多个线程之间共享,而 Hashtable 是同步的......

【讨论】:

    【解决方案2】:

    如您所见:

    这里:

    必须首先调用super 回调,以避免由于Activity 创建不完整而导致的错误。

    截图来源:https://developer.android.com/guide/components/activities/activity-lifecycle#java

    【讨论】:

    • 虽然您的回答是正确的并且文档对此很清楚,但这并不是我崩溃的真正原因。您可以在我自己的答案中查看更多信息,感谢您的帮助
    • 我认为要了解您的崩溃原因,我们需要查看代码
    【解决方案3】:

    我刚刚在导入的新 firebase-corefirebase-analytics api 中发现了这个问题。

    要解决它,我需要降级

    implementation 'com.google.firebase:firebase-core:17.2.0'
    

    更多信息请参考这里。 java.util.ConcurrentModificationException in activity onCreate

    【讨论】:

      【解决方案4】:

      它的com.google.firebase:firebase-core 错误。他们在 17.2.3 版本中对其进行了修复,请参阅更新日志:https://firebase.google.com/support/release-notes/android#analytics_v17-2-3

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-16
        • 2014-09-28
        • 1970-01-01
        • 1970-01-01
        • 2014-10-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多