UI线程就干UI的事儿,别让它干别的
耗时操作比如读写数据库、IO、联网啥的,都扔到子线程里去搞
线程之间通信多用Handler
遇到ANR咋办?
1. 先看log
2. 去trace.txt里查调用栈
3. 再回去看代码
4. 搞清楚ANR具体原因,是IO卡了?线程阻塞了?还是内存泄漏?
举个ANR日志的例子:
04-01 13:12:11.572 I/InputDispatcher( 220): 应用没反应了:Window{2b263310 com.android.email/com.android.email.activity.SplitScreenActivity paused=false},已经卡了5009.8ms,等了5009.5ms还没回应
04-01 13:12:11.572 I/WindowManager( 220): 输入事件超时,发不出去了
04-01 13:12:14.123 I/Process( 220): 发信号了,PID:21404,发的是SIG:3 — 这个时间点ANR发生并开始生成trace文件
04-01 13:12:14.123 I/dalvikvm(21404): threadid=4: 收到信号3
……
04-01 13:12:15.872 E/ActivityManager( 220): ANR in com.android.email (com.android.email/.activity.SplitScreenActivity)
04-01 13:12:15.872 E/ActivityManager( 220): 原因:keyDispatchingTimedOut
耗时操作比如读写数据库、IO、联网啥的,都扔到子线程里去搞
线程之间通信多用Handler
遇到ANR咋办?
1. 先看log
2. 去trace.txt里查调用栈
3. 再回去看代码
4. 搞清楚ANR具体原因,是IO卡了?线程阻塞了?还是内存泄漏?
举个ANR日志的例子:
04-01 13:12:11.572 I/InputDispatcher( 220): 应用没反应了:Window{2b263310 com.android.email/com.android.email.activity.SplitScreenActivity paused=false},已经卡了5009.8ms,等了5009.5ms还没回应
04-01 13:12:11.572 I/WindowManager( 220): 输入事件超时,发不出去了
04-01 13:12:14.123 I/Process( 220): 发信号了,PID:21404,发的是SIG:3 — 这个时间点ANR发生并开始生成trace文件
04-01 13:12:14.123 I/dalvikvm(21404): threadid=4: 收到信号3
……
04-01 13:12:15.872 E/ActivityManager( 220): ANR in com.android.email (com.android.email/.activity.SplitScreenActivity)
04-01 13:12:15.872 E/ActivityManager( 220): 原因:keyDispatchingTimedOut