01-18 08:43:49.796: ERROR/ActivityManager(60): ANR in com.vanceinfo
01-18 08:43:49.796: ERROR/ActivityManager(60): Reason: Executing service com.vanceinfo/.service.WidgetService
01-18 08:43:49.796: ERROR/ActivityManager(60): Load: 0.1 / 0.12 / 0.17
01-18 08:43:49.796: ERROR/ActivityManager(60): CPU usage from 187786ms to 70ms ago:
01-18 08:43:49.796: ERROR/ActivityManager(60):   system_server: 2% = 1% user + 0% kernel / faults: 177 minor
01-18 08:43:49.796: ERROR/ActivityManager(60):   m.android.phone: 0% = 0% user + 0% kernel / faults: 21 minor
01-18 08:43:49.796: ERROR/ActivityManager(60):   adbd: 0% = 0% user + 0% kernel
01-18 08:43:49.796: ERROR/ActivityManager(60):   logcat: 0% = 0% user + 0% kernel
01-18 08:43:49.796: ERROR/ActivityManager(60):   qemud: 0% = 0% user + 0% kernel
01-18 08:43:49.796: ERROR/ActivityManager(60):   zygote: 0% = 0% user + 0% kernel / faults: 34 minor
01-18 08:43:49.796: ERROR/ActivityManager(60):   ndroid.launcher: 0% = 0% user + 0% kernel / faults: 9 minor
01-18 08:43:49.796: ERROR/ActivityManager(60):   m.android.email: 0% = 0% user + 0% kernel / faults: 8 minor
01-18 08:43:49.796: ERROR/ActivityManager(60):   events/0: 0% = 0% user + 0% kernel
01-18 08:43:49.796: ERROR/ActivityManager(60):   rild: 0% = 0% user + 0% kernel
01-18 08:43:49.796: ERROR/ActivityManager(60):   d.process.acore: 0% = 0% user + 0% kernel / faults: 9 minor
01-18 08:43:49.796: ERROR/ActivityManager(60):   re-initialized>: 0% = 0% user + 0% kernel / faults: 7 minor
01-18 08:43:49.796: ERROR/ActivityManager(60):   d.process.media: 0% = 0% user + 0% kernel / faults: 9 minor
01-18 08:43:49.796: ERROR/ActivityManager(60):   com.svox.pico: 0% = 0% user + 0% kernel / faults: 7 minor
01-18 08:43:49.796: ERROR/ActivityManager(60):   pdflush: 0% = 0% user + 0% kernel
01-18 08:43:49.796: ERROR/ActivityManager(60):   servicemanager: 0% = 0% user + 0% kernel / faults: 10 minor
01-18 08:43:49.796: ERROR/ActivityManager(60):   utmethod.pinyin: 0% = 0% user + 0% kernel / faults: 7 minor
01-18 08:43:49.796: ERROR/ActivityManager(60):   id.defcontainer: 0% = 0% user + 0% kernel / faults: 8 minor
01-18 08:43:49.796: ERROR/ActivityManager(60):   com.android.mms: 0% = 0% user + 0% kernel / faults: 8 minor
01-18 08:43:49.796: ERROR/ActivityManager(60):   ndroid.settings: 0% = 0% user + 0% kernel / faults: 7 minor
01-18 08:43:49.796: ERROR/ActivityManager(60):  +com.vanceinfo: 0% = 0% user + 0% kernel
01-18 08:43:49.796: ERROR/ActivityManager(60):  +com.vanceinfo: 0% = 0% user + 0% kernel
01-18 08:43:49.796: ERROR/ActivityManager(60): TOTAL: 4% = 2% user + 1% kernel + 0% irq + 0% softirq

解决方案 »

  1.   

    Android SDK的说明很有误导性。android的service,只是用于后台,一般不能用于运算量很大或者占用线程时间很长的处理。
    service和activity一样,都是在主线程中调用的,他们的那些方法,都是被主线程的looper和handler根据事件和状态分散处理的,如果一个函数时间很长,都要出现ANR问题。如果一个函数执行时间很长,需要起线程,或者起service,但这个service需要单独的进程中运行,不能和activity在一个进程中。在一个进程中,占时间长的函数,最好能用异步线程(这要求运算模块很独立才行),用普通线程,同步不好也会有问题,同步问题最好是状态机+handler来处理吧。