我的WearOS应用程序经常出现关于android.intent.action.SCREEN_OFF广播的常规ANR,而我并没有注册它。
这主要发生在三星Galaxy Watch4设备上,就像我正在开发的那个一样。
情况很复杂,谷歌搜索也没有帮助太多。以下是流程,请耐心阅读:
- 应用程序正常启动,按预期工作;
- 手表向下转动,屏幕关闭。到目前为止还好;
- 我等待约20秒,让Wear OS将我的应用程序移到后台并返回手表表盘;
- 我在ADB中看到该应用程序正在运行;
- 我将手表翻转过来,屏幕亮起来,我看到了手表表盘,我的应用程序在后台;
- 我再次将手表翻转向下,等待几秒钟,然后它崩溃了并显示ANR。
原因:Intent { act = android.intent.action.SCREEN_OFF flg = 0x50200010(具有extras)的广播}
我已经开发了一段时间,并且知道如何阅读日志,但是我在那里找不到任何可能导致此广播注册却没有响应的线索。我能想到的唯一可能原因是我使用的导入很少。它们在这里:
dependencies {
implementation 'com.google.android.gms:play-services-wearable:17.1.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.wear:wear:1.2.0'
implementation 'androidx.core:core-splashscreen:1.0.0-beta01'
implementation 'androidx.preference:preference:1.2.0'
implementation 'com.mcxiaoke.volley:library:1.0.19'
implementation 'androidx.viewpager2:viewpager2:1.0.0'
}
SDK:
minSdk 25
targetSdk 31
我怀疑启动画面是最接近屏幕的,所以我将其删除了,但是ANR还是发生了。
我甚至尝试实现自己的BroadcastReceiver,并在onPause时不注销它以便给系统一些回答,甚至在其onReceive()
中添加了this.goAsync().finish();
,但这并没有帮助。
有人遇到过这种情况吗?任何帮助都将不胜感激!