本帖最后由 HellDevil 于 2011-07-06 13:32:29 编辑

解决方案 »

  1.   

    我怀疑是代码有的地方在做耗时的处理 楼主你把有可能耗时的地方 写在一个Thtead 中
    new Thread(new Runnable() {
    public void run() {
    //这里写上你耗时的代码。
    }
    }).start();
      

  2.   

    ----- pid 22336 at 2011-05-18 03:56:33 -----
    Cmd line: system_serverDALVIK THREADS:
    (mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)
    "main" prio=5 tid=1 NATIVE
      | group="main" sCount=1 dsCount=0 obj=0x40022320 self=0xcf18
      | sysTid=22336 nice=0 sched=0/0 cgrp=default handle=-1345006400
      at com.android.server.SystemServer.init1(Native Method)
      at com.android.server.SystemServer.main(SystemServer.java:912)
      at java.lang.reflect.Method.invokeNative(Native Method)
      at java.lang.reflect.Method.invoke(Method.java:507)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
      at com.android.internal.os.Method)"Thread-328" prio=5 tid=76 NATIVE
      | group="main" sCount=1 dsCount=0 obj=0x40c67e48 self=0x65eef8
      | sysTid=4152 nice=0 sched=0/0 cgrp=default hZygoteInit.main(ZygoteInit.java:597)
      at dalvik.system.NativeStart.main(Native andle=4449896
      at android.os.MessageQueue.nativePollOnce(Native Method)
      at android.os.MessageQueue.next(MessageQueue.java:119)
      at android.os.Looper.loop(Looper.java:110)
      at com.google.android.gsf.Gservices$1.run(Gservices.java:78)"java.lang.ProcessManager" daemon prio=5 tid=75 WAIT
      | group="main" sCount=1 dsCount=0 obj=0x40bb7280 self=0xc9c140
      | sysTid=2106 nice=0 sched=0/0 cgrp=default handle=10084168
      at java.lang.Object.wait(Native Method)
      - waiting on <0x40a92da8> (a java.util.HashMap)
      at java.lang.Object.wait(Object.java:358)
      at java.lang.ProcessManager.onExit(ProcessManager.java:139)
      at java.lang.ProcessManager.watchChildren(Native Method)
      at java.lang.ProcessManager$1.run(ProcessManager.java:85)"pool-1-thread-10" prio=5 tid=72 WAIT
      | group="main" sCount=1 dsCount=0 obj=0x40a650b0 self=0x9488b0
      | sysTid=22880 nice=0 sched=0/0 cgrp=default handle=7043960
      at java.lang.Object.wait(Native Method)
      - waiting on <0x40a65210> (a java.lang.VMThread)
      at java.lang.Thread.parkFor(Thread.java:1424)
      at java.lang.LangAccessImpl.parkFor(LangAccessImpl.java:48)
      at sun.misc.Unsafe.park(Unsafe.java:337)
      at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2016)
      at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:411)
      at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1021)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
      at java.lang.Thread.run(Thread.java:1019)"pool-1-thread-9" prio=5 tid=71 WAIT
      | group="main" sCount=1 dsCount=0 obj=0x409c8410 self=0x409588
      | sysTid=22879 nice=0 sched=0/0 cgrp=default handle=7043760
      at java.lang.Object.wait(Native Method)
      - waiting on <0x409c8570> (a java.lang.VMThread)
      at java.lang.Thread.parkFor(Thread.java:1424)
      at java.lang.LangAccessImpl.parkFor(LangAccessImpl.java:48)
      at sun.misc.Unsafe.park(Unsafe.java:337)
      at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2016)
      at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:411)
      at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1021)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
      at java.lang.Thread.run(Thread.java:1019)这个是其中一次导致zygote crash的时候system_server 的ANR
      

  3.   

    zygote反汇编看到的情况是走到 select函数 挂了。这个怎么解释啊!#00 pc 0000b8e4 /system/lib/libc.so
      

  4.   

    fault addr 00005740
    这个地址就比较值得考虑了。 正常用户端访问的进程,不会这么小的。
    耗时处理和这个死法是不一样的。 dalvik的耗时处理,会让suspendThread不能成功,不能成功的话就无法做gc或其他一些事情,这时虚拟机会自己abort,abort的方法就是调用个内存非法写操作,最后的现象和你描述的有点类似,但原因绝对是不一样的。
      

  5.   

    没有人知道吗?
    我现在还遇到个问题,就是再调用Andorid GC(垃圾回收的相关函数处理的时候,就是dvmHeapMarkRootSet)这个函数时候,提示挂掉了。哎 真悲剧 不知道为什么 在标记root对象的时候会挂掉
      

  6.   

    signal 6 (SIGABRT), code 0 (?), fault addr 00005740
    在错误Error类,会定义了6的具体含义。