当我运行猴子测试时,发现了 ANR。查看 /data/anr 中的 anr 日志,发现 NotifiThread(在 MyService 中定义)中的代码可能会导致 ANR:
Thread.sleep(Util.getIntervalTime(getBaseContext())); //(the first one in detail code).
问题是代码在子线程中运行(NotifiThread不是由Handler.post(Runnable)调用而是由new Thread().start()调用的)。为什么我会得到 ANR。有人可以就这种情况给一些建议吗,谢谢。以下是详细代码和 ANR 日志。
详细代码:
public class MyService extends Service {
部分省略.....
class NotifiThread extends Thread {
public void run() {
while (isAvailable) {
try {
String json = null;
json = new HttpActions(getBaseContext()).getPushNotification(getApplicationContext());
if (null != json && json.length() > 0) {
JSONObject jsonObject = new JSONObject(json);
int code = jsonObject.getInt("code");
String msg = jsonObject.getString("msg");
if (0 == code) {
if (!jsonObject.isNull("info")) {
JSONArray ja = jsonObject.getJSONArray("info");
for (int i = 0; i < ja.length(); i++) {
String item = ja.getJSONObject(i).toString();
ULog.d(TAG, "Receive a pushMessage: " + item);
if (!TextUtils.isEmpty(item)) {
final Message mymsg = new Message();
mymsg.what = NotifyHandlerProvider.HANDLER_SET_STATUES_BAR;
mymsg.obj = item;
handlerProvider.handleMessage(mymsg);
}
}
}
}
else {
ULog.i(TAG, json.toString());
}
}
ULog.i(TAG, "intervale Time -->"+Util.getIntervalTime(getBaseContext()));
Thread.sleep(Util.getIntervalTime(getBaseContext())); /////////here may be cause anr
// Thread.sleep(30000); //test time 30Sec
} catch (InterruptedException e) {
ULog.e(TAG, e.getMessage());
e.printStackTrace();
} catch (TVException e) {
try {
ULog.i(TAG, "intervale Time -->"+Util.getIntervalTime(getBaseContext()));
Thread.sleep(Util.getIntervalTime(getBaseContext()));
// Thread.sleep(30000); //test time 30S
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
ULog.e(TAG, e.getMessage());
e.printStackTrace();
} catch (JSONException e) {
ULog.e(TAG, e.getMessage());
e.printStackTrace();
}
}
};
}
ANR
----- pid 28042 at 2013-10-21 13:06:03 -----
Cmd line: com.test.video
DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0)
"Binder_5" prio=5 tid=19 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x42a08ae8 self=0x7479f600
| sysTid=28605 nice=0 sched=0/0 cgrp=apps handle=1954414600
| state=S schedstat=( 58163235 63427446 882 ) utm=1 stm=4 core=0
#00 pc 00017004 /system/lib/libc.so (__ioctl+8)
#01 pc 0002a9ad /system/lib/libc.so (ioctl+16)
#02 pc 00016ba1 /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+132)
#03 pc 00017363 /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+154)
#04 pc 0001b15d /system/lib/libbinder.so
#05 pc 00011267 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+114)
#06 pc 0004e21b /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+66)
#07 pc 00010dcd /system/lib/libutils.so
#08 pc 0000e3f8 /system/lib/libc.so (__thread_entry+72)
#09 pc 0000dae4 /system/lib/libc.so (pthread_create+160)
at dalvik.system.NativeStart.run(Native Method)
"Thread-573" prio=5 tid=1 VMWAIT
| group="main" sCount=1 dsCount=0 obj=0x421eaaf8 self=0x40b880c0
| sysTid=28042 nice=0 sched=0/0 cgrp=apps handle=1074359516
| state=S schedstat=( 23552699271 9147967005 63188 ) utm=1977 stm=378 core=1
#00 pc 00018124 /system/lib/libc.so (__futex_syscall3+8)
#01 pc 0000e43c /system/lib/libc.so (__pthread_cond_timedwait_relative+48)
#02 pc 0000e498 /system/lib/libc.so (__pthread_cond_timedwait+60)
#03 pc 0004d239 /system/lib/libdvm.so
#04 pc 0003cf05 /system/lib/libdvm.so
#05 pc 0004efed /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*)+452)
#06 pc 0000126b /system/bin/app_process
#07 pc 0001273f /system/lib/libc.so (__libc_init+38)
#08 pc 00000dac /system/bin/app_process
at dalvik.system.NativeStart.run(Native Method)
"Binder_4" prio=5 tid=16 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x41d11028 self=0x743347c0
| sysTid=28103 nice=0 sched=0/0 cgrp=apps handle=1896592128
| state=S schedstat=( 132144092 125415546 1964 ) utm=6 stm=7 core=1
#00 pc 00017004 /system/lib/libc.so (__ioctl+8)
#01 pc 0002a9ad /system/lib/libc.so (ioctl+16)
#02 pc 00016ba1 /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+132)
#03 pc 00017363 /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+154)
#04 pc 0001b15d /system/lib/libbinder.so
#05 pc 00011267 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+114)
#06 pc 0004e21b /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+66)
#07 pc 00010dcd /system/lib/libutils.so
#08 pc 0000e3f8 /system/lib/libc.so (__thread_entry+72)
#09 pc 0000dae4 /system/lib/libc.so (pthread_create+160)
at dalvik.system.NativeStart.run(Native Method)
"Binder_3" prio=5 tid=18 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x41bfd4b8 self=0x74388018
| sysTid=28089 nice=0 sched=0/0 cgrp=apps handle=1950543768
| state=S schedstat=( 132114412 125727705 1949 ) utm=3 stm=10 core=0
#00 pc 00017004 /system/lib/libc.so (__ioctl+8)
#01 pc 0002a9ad /system/lib/libc.so (ioctl+16)
#02 pc 00016ba1 /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+132)
#03 pc 00017363 /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+154)
#04 pc 0001b15d /system/lib/libbinder.so
#05 pc 00011267 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+114)
#06 pc 0004e21b /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+66)
#07 pc 00010dcd /system/lib/libutils.so
#08 pc 0000e3f8 /system/lib/libc.so (__thread_entry+72)
#09 pc 0000dae4 /system/lib/libc.so (pthread_create+160)
at dalvik.system.NativeStart.run(Native Method)
"AsyncTask #5" prio=5 tid=17 WAIT
| group="main" sCount=1 dsCount=0 obj=0x41b7c370 self=0x710c6890
| sysTid=28080 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1893610120
| state=S schedstat=( 857607967 1441615524 4827 ) utm=60 stm=25 core=3
at java.lang.Object.wait(Native Method)
- waiting on <0x41b7c4c8> (a java.lang.VMThread) held by tid=17 (AsyncTask #5)
at java.lang.Thread.parkFor(Thread.java:1231)
at sun.misc.Unsafe.park(Unsafe.java:323)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
"AsyncTask #4" prio=5 tid=15 WAIT
| group="main" sCount=1 dsCount=0 obj=0x419c12c8 self=0x743328e0
| sysTid=28077 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1949520432
| state=S schedstat=( 596551542 1174248245 5467 ) utm=39 stm=20 core=3
at java.lang.Object.wait(Native Method)
- waiting on <0x419c13e8> (a java.lang.VMThread) held by tid=15 (AsyncTask #4)
at java.lang.Thread.parkFor(Thread.java:1231)
at sun.misc.Unsafe.park(Unsafe.java:323)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
"Thread-550" prio=5 tid=14 TIMED_WAIT
| group="main" sCount=1 dsCount=0 obj=0x416a6308 self=0x710d5d68
| sysTid=28066 nice=0 sched=0/0 cgrp=apps handle=1893625880
| state=S schedstat=( 10528334 14255987 70 ) utm=0 stm=1 core=2
at java.lang.VMThread.sleep(Native Method)
at java.lang.Thread.sleep(Thread.java:1031)
at java.lang.Thread.sleep(Thread.java:1013)
at com.test.video.service.MyService$NotifiThread.run(MyService.java:508)
"AsyncTask #3" prio=5 tid=13 WAIT
| group="main" sCount=1 dsCount=0 obj=0x415a4f18 self=0x70dec7b8
| sysTid=28064 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1893405336
| state=S schedstat=( 1123509415 1620520145 6104 ) utm=91 stm=21 core=2
at java.lang.Object.wait(Native Method)
- waiting on <0x415a5000> (a java.lang.VMThread) held by tid=13 (AsyncTask #3)
at java.lang.Thread.parkFor(Thread.java:1231)
at sun.misc.Unsafe.park(Unsafe.java:323)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
"AsyncTask #2" prio=5 tid=12 WAIT
| group="main" sCount=1 dsCount=0 obj=0x41626ed0 self=0x710c9938
| sysTid=28063 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1893395672
| state=S schedstat=( 945973203 1552117896 5193 ) utm=75 stm=19 core=1
at java.lang.Object.wait(Native Method)
- waiting on <0x41626ff0> (a java.lang.VMThread) held by tid=12 (AsyncTask #2)
at java.lang.Thread.parkFor(Thread.java:1231)
at sun.misc.Unsafe.park(Unsafe.java:323)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
"AsyncTask #1" prio=5 tid=11 WAIT
| group="main" sCount=1 dsCount=0 obj=0x416af260 self=0x710b3c30
| sysTid=28062 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1893382640
| state=S schedstat=( 774461097 1362864121 5559 ) utm=54 stm=23 core=3
at java.lang.Object.wait(Native Method)
- waiting on <0x415ad128> (a java.lang.VMThread) held by tid=11 (AsyncTask #1)
at java.lang.Thread.parkFor(Thread.java:1231)
at sun.misc.Unsafe.park(Unsafe.java:323)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
"Binder_2" prio=5 tid=10 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x415a4b18 self=0x70e4d2b0
| sysTid=28054 nice=0 sched=0/0 cgrp=apps handle=1896643992
| state=S schedstat=( 142965634 150228508 2048 ) utm=5 stm=9 core=0
#00 pc 00017004 /system/lib/libc.so (__ioctl+8)
#01 pc 0002a9ad /system/lib/libc.so (ioctl+16)
#02 pc 00016ba1 /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+132)
#03 pc 00017363 /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+154)
#04 pc 0001b15d /system/lib/libbinder.so
#05 pc 00011267 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+114)
#06 pc 0004e21b /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+66)
#07 pc 00010dcd /system/lib/libutils.so
#08 pc 0000e3f8 /system/lib/libc.so (__thread_entry+72)
#09 pc 0000dae4 /system/lib/libc.so (pthread_create+160)
at dalvik.system.NativeStart.run(Native Method)
"Binder_1" prio=5 tid=9 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x415a49f8 self=0x710b7df0
| sysTid=28053 nice=0 sched=0/0 cgrp=apps handle=1896663640
| state=S schedstat=( 140215235 144292144 2123 ) utm=7 stm=7 core=0
#00 pc 00017004 /system/lib/libc.so (__ioctl+8)
#01 pc 0002a9ad /system/lib/libc.so (ioctl+16)
#02 pc 00016ba1 /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+132)
#03 pc 00017363 /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+154)
#04 pc 0001b15d /system/lib/libbinder.so
#05 pc 00011267 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+114)
#06 pc 0004e21b /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+66)
#07 pc 00010dcd /system/lib/libutils.so
#08 pc 0000e3f8 /system/lib/libc.so (__thread_entry+72)
#09 pc 0000dae4 /system/lib/libc.so (pthread_create+160)
at dalvik.system.NativeStart.run(Native Method)
"FinalizerWatchdogDaemon" daemon prio=5 tid=8 WAIT
| group="system" sCount=1 dsCount=0 obj=0x415a1988 self=0x70deccf0
| sysTid=28052 nice=0 sched=0/0 cgrp=apps handle=1893606648
| state=S schedstat=( 620418 13513387 17 ) utm=0 stm=0 core=1
at java.lang.Object.wait(Native Method)
- waiting on <0x412ee740> (a java.lang.Daemons$FinalizerWatchdogDaemon)
at java.lang.Object.wait(Object.java:364)
at java.lang.Daemons$FinalizerWatchdogDaemon.waitForObject(Daemons.java:230)
at java.lang.Daemons$FinalizerWatchdogDaemon.run(Daemons.java:207)
at java.lang.Thread.run(Thread.java:856)
"FinalizerDaemon" daemon prio=5 tid=7 WAIT
| group="system" sCount=1 dsCount=0 obj=0x415a17d8 self=0x70deac60
| sysTid=28051 nice=0 sched=0/0 cgrp=apps handle=1896645744
| state=S schedstat=( 237348859 113429164 639 ) utm=18 stm=5 core=2
at java.lang.Object.wait(Native Method)
- waiting on <0x412da6d0> (a java.lang.ref.ReferenceQueue)
at java.lang.Object.wait(Object.java:401)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:102)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:73)
at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:170)
at java.lang.Thread.run(Thread.java:856)
"ReferenceQueueDaemon" daemon prio=5 tid=6 WAIT
| group="system" sCount=1 dsCount=0 obj=0x415a1670 self=0x710d4878
| sysTid=28050 nice=0 sched=0/0 cgrp=apps handle=1896697032
| state=S schedstat=( 43269535 17372391 384 ) utm=3 stm=1 core=1
at java.lang.Object.wait(Native Method)
- waiting on <0x412da5f8>
at java.lang.Object.wait(Object.java:364)
at java.lang.Daemons$ReferenceQueueDaemon.run(Daemons.java:130)
at java.lang.Thread.run(Thread.java:856)
"Compiler" daemon prio=5 tid=5 VMWAIT
| group="system" sCount=1 dsCount=0 obj=0x415a1580 self=0x710ca9f0
| sysTid=28049 nice=0 sched=0/0 cgrp=apps handle=1893549920
| state=S schedstat=( 1281331973 447299814 15680 ) utm=66 stm=62 core=0
#00 pc 00018124 /system/lib/libc.so (__futex_syscall3+8)
#01 pc 0000e43c /system/lib/libc.so (__pthread_cond_timedwait_relative+48)
#02 pc 0000e498 /system/lib/libc.so (__pthread_cond_timedwait+60)
#03 pc 00075aa1 /system/lib/libdvm.so
#04 pc 00056d37 /system/lib/libdvm.so
#05 pc 0000e3f8 /system/lib/libc.so (__thread_entry+72)
#06 pc 0000dae4 /system/lib/libc.so (pthread_create+160)
at dalvik.system.NativeStart.run(Native Method)
"JDWP" daemon prio=5 tid=4 VMWAIT
| group="system" sCount=1 dsCount=0 obj=0x415a1388 self=0x70deb138
| sysTid=28048 nice=0 sched=0/0 cgrp=apps handle=1090180312
| state=S schedstat=( 1557552 1913854 12 ) utm=0 stm=0 core=1
#00 pc 0001712c /system/lib/libc.so (select+20)
#01 pc 0006396b /system/lib/libdvm.so
#02 pc 000664fd /system/lib/libdvm.so
#03 pc 00056d37 /system/lib/libdvm.so
#04 pc 0000e3f8 /system/lib/libc.so (__thread_entry+72)
#05 pc 0000dae4 /system/lib/libc.so (pthread_create+160)
at dalvik.system.NativeStart.run(Native Method)
"Signal Catcher" daemon prio=5 tid=3 RUNNABLE
| group="system" sCount=0 dsCount=0 obj=0x415a1290 self=0x710be808
| sysTid=28047 nice=0 sched=0/0 cgrp=apps handle=1090180536
| state=R schedstat=( 24663384 63246041 286 ) utm=0 stm=2 core=1
at dalvik.system.NativeStart.run(Native Method)
"GC" daemon prio=5 tid=2 VMWAIT
| group="system" sCount=1 dsCount=0 obj=0x415a11b0 self=0x710b4130
| sysTid=28046 nice=0 sched=0/0 cgrp=apps handle=1090181064
| state=S schedstat=( 750353301 214129197 783 ) utm=71 stm=4 core=1
#00 pc 00018124 /system/lib/libc.so (__futex_syscall3+8)
#01 pc 0000e43c /system/lib/libc.so (__pthread_cond_timedwait_relative+48)
#02 pc 0000e498 /system/lib/libc.so (__pthread_cond_timedwait+60)
#03 pc 0007477f /system/lib/libdvm.so
#04 pc 00056d37 /system/lib/libdvm.so
#05 pc 0000e3f8 /system/lib/libc.so (__thread_entry+72)
#06 pc 0000dae4 /system/lib/libc.so (pthread_create+160)
at dalvik.system.NativeStart.run(Native Method)
----- 结束 28042 -----