几周前,我注意到 Crashlytics 崩溃了:
Fatal Exception: java.lang.IllegalArgumentException: Activity client record must not be null to execute transaction item
at android.app.servertransaction.ActivityTransactionItem.getActivityClientRecord(ActivityTransactionItem.java:85)
at android.app.servertransaction.ActivityTransactionItem.getActivityClientRecord(ActivityTransactionItem.java:58)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:43)
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:2438)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8663)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
似乎发生在应用程序启动时,但在 Android 12 上为 100%,在三星(75% 三星 Galaxy A51)设备上为 95%。我检查了 A51,但对我来说它工作正常,我无法重现该问题。也许有人已经解决了这个问题,或者对可能出现什么问题或哪里出了问题有一些见解?谢谢!
看起来这是 Android 12 中的一个错误,已修复,但尚未完全推出。参考:https://issuetracker.google.com/issues/210886009
您可以通过绕过 Android 12 上的启动屏幕 API 来解决此问题,如下所示:
class MyActivity : AppCompatActivity() {
private var splashScreen: SplashScreen? = null
private val shouldAvoidSplashScreen = Build.VERSION.SDK_INT == Build.VERSION_CODES.S ||
Build.VERSION.SDK_INT == Build.VERSION_CODES.S_V2
private var dismissSplash = false
override fun onCreate(savedInstanceState: Bundle?) {
if (shouldAvoidSplashScreen) setTheme(R.style.Theme_MyApp) else {
splashScreen = installSplashScreen()
}
super.onCreate(savedInstanceState)
if (shouldAvoidSplashScreen.not()) splashScreen?.run {
setKeepOnScreenCondition { !dismissSplash }
}
setContent { ... }
}
}