代码之家  ›  专栏  ›  技术社区  ›  Mike Lowery

终止android服务后获得ANRs

  •  2
  • Mike Lowery  · 技术社区  · 14 年前

    我有一个使用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。

    2 回复  |  直到 14 年前
        1
  •  4
  •   user621267    13 年前

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

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

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

        2
  •  0
  •   ShadowGod    14 年前

    BIND_AUTO_CREATE 你的旗帜 bindService 命令。不希望我的服务在任何时候自动启动,我只是没有使用

    再说一次,我可能完全错了,但这是值得尝试的。