2010-09-25 78 views
2

我有一个使用bindService()方法启动本地服务的活动。终止Android服务后获取ANR

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从服务解除绑定(),几秒钟后,我看到下面的错误在logcat中显示了一切的伟大工程考虑到活动和服务都已终止(onDestroy()已在两者中执行),这里发生了什么。我猜测还有一个线程在某处运行?该服务确实创建并使用Android MediaPlayer。

+0

你解决了吗?如果是的话,可否请您更新您的解决方案?如果不是,请检查您的服务onUnbind()返回的内容。当我设置它返回false然后它工作正常,但如果是true,那么我得到ANR。然而,我不明白为什么返回false会为我修复它。我希望我能清楚地理解。 – 2010-10-21 20:34:18

回答

4

服务终止后,我还收到ANR消息。

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

删除对bindService()的调用解决了这个问题。

+0

看着我的代码,我只在应用程序的OnCreate和onResume方法中调用bindService(并且只有在它为null时)。 – 2011-02-19 18:32:01

+0

好吧,我想我找到了ANR问题。我的服务的变量不会设置,直到onServiceConnected触发,所以检查null在onResume中无法正常工作。我从onResume中完全取出了bindService,现在没有更多的ANR了。但是,我发现我的服务在我的应用程序暂停和恢复时(例如屏幕旋转)仍然被破坏并重新创建。这是使用BIND_AUTO_CREATE的工件吗?我不希望我的服务在我的应用程序被销毁之前被销毁。 – 2011-02-19 23:48:19

+1

在http://stackoverflow.com/questions/3385554找到答案。 – 2011-02-20 05:31:15

0

作为一个新的开发者,我自己发生在我身上,但我不太清楚我是如何解决它的。我认为这与绑定服务有关。根据Google的文档,只要绑定到服务,如果您在bindService命令中使用BIND_AUTO_CREATE标志,服务就会自动启动。不想让我的服务在感觉像自动时自动启动我只是没有使用BIND_AUTO_CREATE标志,我想修复它。

再次,我可能是完全错误的,但这是一些尝试。