终止android服务后获取ANR

终止android服务后获取ANR,android,Android,我有一个活动,它使用bindService()方法启动本地服务。应用程序运行时,一切正常,但当我在活动的onDestroy()中终止应用程序并解除与服务的绑定时,几秒钟后,我看到logcat中显示以下错误: 09-25 02:13:46.035: WARN/ActivityManager(60): Timeout executing service: ServiceRecord{4401dfc0 net.kicksass.shootingstarbbs.streamstar/.StreamSta

我有一个活动,它使用bindService()方法启动本地服务。应用程序运行时,一切正常,但当我在活动的onDestroy()中终止应用程序并解除与服务的绑定时,几秒钟后,我看到logcat中显示以下错误:

09-25 02:13:46.035: WARN/ActivityManager(60): Timeout executing service: ServiceRecord{4401dfc0 net.kicksass.shootingstarbbs.streamstar/.StreamStarService}
09-25 02:13:46.055: INFO/Process(60): Sending signal. PID: 285 SIG: 3
09-25 02:13:46.055: INFO/dalvikvm(285): threadid=3: reacting to signal 3
09-25 02:13:46.103: INFO/dalvikvm(285): Wrote stack traces to '/data/anr/traces.txt'
09-25 02:13:46.103: INFO/Process(60): Sending signal. PID: 60 SIG: 3
09-25 02:13:46.103: INFO/dalvikvm(60): threadid=3: reacting to signal 3
09-25 02:13:46.203: INFO/dalvikvm(60): Wrote stack traces to '/data/anr/traces.txt'
...
09-25 02:13:46.683: ERROR/ActivityManager(60): ANR in net.kicksass.shootingstarbbs.streamstar
09-25 02:13:46.683: ERROR/ActivityManager(60): Reason: Executing service net.kicksass.shootingstarbbs.streamstar/.StreamStarService
09-25 02:13:46.683: ERROR/ActivityManager(60): Load: 3.08 / 1.16 / 0.41
09-25 02:13:46.683: ERROR/ActivityManager(60): CPU usage from 21237ms to 43ms ago:
09-25 02:13:46.683: ERROR/ActivityManager(60):   rbbs.streamstar: 7% = 4% user + 2% kernel / faults: 4967 minor 14 major
09-25 02:13:46.683: ERROR/ActivityManager(60):   system_server: 3% = 2% user + 1% kernel / faults: 434 minor 8 major
09-25 02:13:46.683: ERROR/ActivityManager(60):   com.svox.pico: 1% = 0% user + 0% kernel / faults: 2817 minor 1 major
09-25 02:13:46.683: ERROR/ActivityManager(60):   adbd: 0% = 0% user + 0% kernel
09-25 02:13:46.683: ERROR/ActivityManager(60):   ndroid.launcher: 0% = 0% user + 0% kernel / faults: 353 minor
09-25 02:13:46.683: ERROR/ActivityManager(60):   m.android.phone: 0% = 0% user + 0% kernel / faults: 187 minor
09-25 02:13:46.683: ERROR/ActivityManager(60):   putmethod.latin: 0% = 0% user + 0% kernel / faults: 151 minor 1 major
09-25 02:13:46.683: ERROR/ActivityManager(60):   .quicksearchbox: 0% = 0% user + 0% kernel / faults: 115 minor 1 major
09-25 02:13:46.683: ERROR/ActivityManager(60):   m.android.email: 0% = 0% user + 0% kernel / faults: 140 minor 1 major
09-25 02:13:46.683: ERROR/ActivityManager(60):   kswapd0: 0% = 0% user + 0% kernel
09-25 02:13:46.683: ERROR/ActivityManager(60):   logcat: 0% = 0% user + 0% kernel / faults: 6 minor
09-25 02:13:46.683: ERROR/ActivityManager(60):   ndroid.settings: 0% = 0% user + 0% kernel / faults: 118 minor
09-25 02:13:46.683: ERROR/ActivityManager(60):   d.process.acore: 0% = 0% user + 0% kernel / faults: 90 minor
09-25 02:13:46.683: ERROR/ActivityManager(60):   id.defcontainer: 0% = 0% user + 0% kernel / faults: 103 minor
09-25 02:13:46.683: ERROR/ActivityManager(60):   m.android.music: 0% = 0% user + 0% kernel / faults: 109 minor
09-25 02:13:46.683: ERROR/ActivityManager(60):   d.process.media: 0% = 0% user + 0% kernel / faults: 110 minor
09-25 02:13:46.683: ERROR/ActivityManager(60):   com.android.mms: 0% = 0% user + 0% kernel / faults: 121 minor 1 major
09-25 02:13:46.683: ERROR/ActivityManager(60):   events/0: 0% = 0% user + 0% kernel
09-25 02:13:46.683: ERROR/ActivityManager(60):   roid.alarmclock: 0% = 0% user + 0% kernel / faults: 102 minor
09-25 02:13:46.683: ERROR/ActivityManager(60):   android.protips: 0% = 0% user + 0% kernel / faults: 102 minor
09-25 02:13:46.683: ERROR/ActivityManager(60): TOTAL: 7% = 3% user + 3% kernel + 0% iowait

考虑到活动和服务都已终止(onDestroy()已在这两种情况下执行),不太确定这里发生了什么。我猜还是有一条线索在运行?该服务确实创建并使用了Android MediaPlayer。

作为一个新的开发人员,我自己也遇到过这种情况,但我不太确定我是如何解决的。我认为这和服务的绑定有关。根据谷歌的文档,每当您绑定到服务时,如果您在
bindService
命令中使用
bind\u AUTO\u CREATE
标志,服务就会自动启动。我不希望我的服务在任何时候自动启动,我只是没有使用
BIND\u AUTO\u CREATE
标志,我想这已经解决了问题


同样,我可能完全错了,但这是值得尝试的。

在服务终止后,我也收到了ANR消息

我的问题是,应用程序的主要活动调用“bindService()”两次,一次在“startService()”之前,一次在“startService()”之后


删除对bindService()的任何一个调用都解决了问题。

解决了吗?如果是,请更新您的解决方案好吗?如果没有-检查服务的onUnbind()返回的内容。当我将其设置为返回false时,它工作正常,但如果为true,则得到ANR。然而,我不明白为什么返回错误会为我修复它。我希望我能有一个清晰的理解。看看我的代码,我只在应用程序的OnCreate和onResume方法中调用bindService(并且只有当它为null时)。好的,我想我发现了ANR问题。直到OnServiceConnection触发,我的服务的变量才被设置,因此在onResume中对null的检查无法正常工作。我从onResume中删除了bindService,现在不再有ANR了。然而,我发现每当我的应用程序暂停和恢复时(例如,屏幕旋转),我的服务仍然会被破坏和重新创建。这是使用BIND\u AUTO\u CREATE的产物吗?在我的应用程序被销毁之前,我不希望我的服务被销毁。