【发布时间】:2022-11-10 19:49:35
【问题描述】:
我得到了很多ANR 的在内容解析器在 Firebase Crashlytics 中,因为更新了所有外部谷歌库和目标SDK版本 32.
我在较新的库/Android 版本中错过了 ContentResolver 的任何更改吗?
例如,如果我调用 ContentResolver 来获取计数,则会得到 ANR:
在 com.xxxx.xxx.db.xxxDatabase.getxxxsCount(xxxDatabase.java:1470)
main (native): tid=1 systid=14120
#00 pc 0x4f55c libc.so (syscall + 28)
#01 pc 0x47cc80 libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*) + 140)
#02 pc 0x75b88c libart.so (artJniMethodEnd + 204)
#03 pc 0x20facc libart.so (art_jni_method_end + 12)
at android.os.BinderProxy.transactNative(BinderProxy.java)
at android.os.BinderProxy.transact(BinderProxy.java:584)
at android.content.IContentService$Stub$Proxy.unregisterContentObserver(IContentService.java:1005)
at android.content.ContentResolver.unregisterContentObserver(ContentResolver.java:2730)
at android.database.AbstractCursor.onDeactivateOrClose(AbstractCursor.java:157)
at android.database.AbstractWindowedCursor.onDeactivateOrClose(AbstractWindowedCursor.java:213)
at android.database.AbstractCursor.close(AbstractCursor.java:186)
at android.database.sqlite.SQLiteCursor.close(SQLiteCursor.java:207)
at android.database.CursorWrapper.close(CursorWrapper.java:54)
at android.content.ContentResolver$CursorWrapperInner.close(ContentResolver.java:3870)
at com.xxxx.xxx.db.xxxDatabase.getxxxsCount(xxxDatabase.java:1470)
at com.xxxx.xxx.db.xxxDatabase.getFiredOffxxxsCount(xxxDatabase.java:1361)
at com.xxxx.xxx.utilities.xxxNotification.shouldGroup(xxxNotification.java:999)
at com.xxxx.xxx.utilities.xxxNotification.getNotification(xxxNotification.java:720)
at com.xxxx.xxx.utilities.xxxNotification.buildNotification(xxxNotification.java:522)
at com.xxxx.xxx.utilities.xxxNotification.buildNotification(xxxNotification.java:451)
at com.xxxx.xxx.utilities.xxxNotification.updateNotificationGroup(xxxNotification.java:1318)
at com.xxxx.xxx.utilities.xxxNotification.cancelNotification(xxxNotification.java:335)
at com.xxxx.xxx.utilities.xxxNotification.snooze(xxxNotification.java:1915)
at com.xxxx.xxx.AlarmList.snoozeAllNewAlarmTime(AlarmList.java:80)
at com.xxxx.xxx.AlarmList.onFinishSnoozeDialog(AlarmList.java:117)
at com.xxxx.xxx.dialogs.SnoozeDialog.onClick(SnoozeDialog.java:279)
at androidx.appcompat.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7898)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
我没有更改任何代码,所以我想知道为什么升级后现在会发生这种情况。我想我错过了用于 ContentResolver 或查询的 AndroidX 或 Android SDK 32 版本的任何背景更改。
我知道这是非常通用的,但目前我不知道在哪里检查问题。 我将不胜感激任何帮助或提示。
2022 年 9 月 28 日更新:
我有时也会遇到 ANR,我的应用程序不涉及任何课程。
main (native): tid=1 systid=9452
#00 pc 0xd6a94 libc.so (__ioctl + 4)
#01 pc 0x935c4 libc.so (ioctl + 156)
#02 pc 0x51a7c libbinder.so (android::IPCThreadState::talkWithDriver(bool) + 296)
#03 pc 0x52a68 libbinder.so (android::IPCThreadState::waitForResponse(android::Parcel*, int*) + 60)
#04 pc 0x527d8 libbinder.so (android::IPCThreadState::transact(int, unsigned int, android::Parcel const&, android::Parcel*, unsigned int) + 184)
#05 pc 0x4b01c libbinder.so (android::BpBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int) + 188)
#06 pc 0x12b3e8 libandroid_runtime.so (android_os_BinderProxy_transact(_JNIEnv*, _jobject*, int, _jobject*, _jobject*, int) + 152)
at android.os.BinderProxy.transactNative(BinderProxy.java)
at android.os.BinderProxy.transact(BinderProxy.java:540)
at bn.h(bn.java:11)
at bk.a(bk.java:3)
at bm.c(bm.java)
at be.d(be.java:2)
at bh.handleMessage(bh.java:28)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:236)
at android.app.ActivityThread.main(ActivityThread.java:8056)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
【问题讨论】:
-
提示:不要在主线程v上做io操作(甚至“只得到一个计数”)
-
我知道这不好,但之前完全没有问题。我没有更改代码。那么现在导致这种情况的框架/androidx是否有任何变化?
标签: android