2010-09-25 88 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標誌,我想修復它。

再次,我可能是完全錯誤的,但這是一些嘗試。