项目中出现了ANR,奉命解决此问题,能否在规定的时间fix掉呢?
07-20 14:51:17.777: I/ActivityManager(52): Displayed activity com.samuel.myapp/.activity.MainActivity: 1544 ms (total 1544 ms)
07-20 14:51:22.446: W/WindowManager(52): Key dispatching timed out sending to com.samuel.myapp/com.samuel.myapp.activity.EntryActivity
07-20 14:51:22.446: W/WindowManager(52): Dispatch state: null
07-20 14:51:22.446: W/WindowManager(52): Current state: {{null to Window{44da06a0 com.samuel.myapp/com.samuel.myapp.activity.EntryActivity paused=true} @ 1342767082449 lw=null lb=null fin=true gfw=true ed=true tts=0 wf=false fp=true mcf=Window{44dd8ab0 com.samuel.myapp/com.samuel.myapp.activity.MainActivity paused=false}}}
07-20 14:51:22.486: I/ActivityManager(52): ANR in process: com.samuel.myapp
07-20 14:51:22.486: I/ActivityManager(52): Annotation: keyDispatchingTimedOut
07-20 14:51:22.486: I/ActivityManager(52): CPU usage:
07-20 14:51:22.486: I/ActivityManager(52): Load: 0.31 / 0.18 / 0.19
07-20 14:51:22.486: I/ActivityManager(52): CPU usage from 6289ms to 32ms ago:
07-20 14:51:22.486: I/ActivityManager(52): hall.alumnilife: 52% = 42% user + 10% kernel / faults: 7311 minor 8 major
07-20 14:51:22.486: I/ActivityManager(52): system_server: 4% = 2% user + 1% kernel / faults: 75 minor
07-20 14:51:22.486: I/ActivityManager(52): adbd: 0% = 0% user + 0% kernel
07-20 14:51:22.486: I/ActivityManager(52): utmethod.pinyin: 0% = 0% user + 0% kernel
07-20 14:51:22.486: I/ActivityManager(52): com.svox.pico: 0% = 0% user + 0% kernel / faults: 2 minor
07-20 14:51:22.486: I/ActivityManager(52): TOTAL: 25% = 21% user + 3% kernel + 0% softirq
07-20 14:51:22.486: I/ActivityManager(52): Removing old ANR trace file from /data/anr/traces.txt
07-20 14:51:22.486: I/Process(52): Sending signal. PID: 260 SIG: 3
07-20 14:51:22.496: I/dalvikvm(260): threadid=7: reacting to signal 3
07-20 14:51:22.506: I/dalvikvm(260): Wrote stack trace to '/data/anr/traces.txt'
07-20 14:51:22.712: I/Process(52): Sending signal. PID: 52 SIG: 3
07-20 14:51:22.712: I/dalvikvm(52): threadid=7: reacting to signal 3
07-20 14:51:22.746: I/dalvikvm(52): Wrote stack trace to '/data/anr/traces.txt'
07-20 14:51:22.955: I/Process(52): Sending signal. PID: 211 SIG: 3
07-20 14:51:22.957: I/dalvikvm(211): threadid=7: reacting to signal 3
07-20 14:51:22.957: I/dalvikvm(211): Wrote stack trace to '/data/anr/traces.txt'
07-20 14:51:23.170: I/Process(52): Sending signal. PID: 104 SIG: 3
07-20 14:51:23.170: I/dalvikvm(104): threadid=7: reacting to signal 3
07-20 14:51:23.176: I/dalvikvm(104): Wrote stack trace to '/data/anr/traces.txt'
07-20 14:51:23.372: I/Process(52): Sending signal. PID: 119 SIG: 3
07-20 14:51:23.372: I/dalvikvm(119): threadid=7: reacting to signal 3
07-20 14:51:23.386: I/dalvikvm(119): Wrote stack trace to '/data/anr/traces.txt'
07-20 14:51:23.575: I/Process(52): Sending signal. PID: 158 SIG: 3
07-20 14:51:23.576: I/dalvikvm(158): threadid=7: reacting to signal 3
07-20 14:51:23.596: I/dalvikvm(158): Wrote stack trace to '/data/anr/traces.txt'
07-20 14:51:23.785: I/Process(52): Sending signal. PID: 188 SIG: 3
07-20 14:51:23.786: I/dalvikvm(188): threadid=7: reacting to signal 3
07-20 14:51:23.816: I/dalvikvm(188): Wrote stack trace to '/data/anr/traces.txt'
07-20 14:51:23.988: I/Process(52): Sending signal. PID: 138 SIG: 3
07-20 14:51:23.988: I/dalvikvm(138): threadid=7: reacting to signal 3
07-20 14:51:23.996: I/dalvikvm(138): Wrote stack trace to '/data/anr/traces.txt'
07-20 14:51:24.191: I/Process(52): Sending signal. PID: 168 SIG: 3
07-20 14:51:24.191: I/dalvikvm(168): threadid=7: reacting to signal 3
07-20 14:51:24.206: I/dalvikvm(168): Wrote stack trace to '/data/anr/traces.txt'
07-20 14:51:24.394: I/Process(52): Sending signal. PID: 101 SIG: 3
07-20 14:51:24.396: I/dalvikvm(101): threadid=7: reacting to signal 3
07-20 14:51:24.416: I/dalvikvm(101): Wrote stack trace to '/data/anr/traces.txt'
07-20 14:51:24.606: I/Process(52): Sending signal. PID: 99 SIG: 3
07-20 14:51:24.606: I/dalvikvm(99): threadid=7: reacting to signal 3
07-20 14:51:24.616: I/dalvikvm(99): Wrote stack trace to '/data/anr/traces.txt'
07-20 14:51:24.837: W/WindowManager(52): Continuing to wait for key to be dispatched
07-20 14:51:24.887: W/WindowManager(52): No window to dispatch pointer action 1com.samuel.myapp
我的基本解决思路,使用排除法将无关的页面进行排除,最终确定是EntryActivity里面的代码有问题。
依据排除法得到,应该是双击事件那里的代码有问题,代码如下:
private void setDataWelcomeView() {
// TODO Auto-generated method stub
welcomePhoto.setImageResource(R.drawable.anniversary);
Toast.makeText(EntryActivity.this,"Double tap to leave this screen",Toast.LENGTH_SHORT).show();
mGestureDetector =new GestureDetector(new MySimpleGesture());
welcomePhoto.setOnTouchListener(this);
welcomePhoto.setClickable(true);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
Log.i("MyGesture","MotionEvent.ACTION_UP");
}
return mGestureDetector.onTouchEvent(event);
}
private class MySimpleGestureextends SimpleOnGestureListener {
public boolean onDoubleTap(MotionEvent e) {
Log.i("MyGesture","onDoubleTap");
startActivity(IntentHelper.getInstance().getIntent(EntryActivity.this, SettingActivity.class));
returnsuper.onDoubleTap(e);
}
public boolean onDoubleTapEvent(MotionEvent e) {
Log.i("MyGesture","onDoubleTapEvent");
startActivity(IntentHelper.getInstance().getIntent(EntryActivity.this, SettingActivity.class));
returnsuper.onDoubleTapEvent(e);
}
}
private void setDataWelcomeView() {
// TODO Auto-generated method stub
welcomePhoto.setImageResource(R.drawable.anniversary);
Toast.makeText(EntryActivity.this, "Double tap to leave this screen",Toast.LENGTH_SHORT).show();
registerDoubleClickListener(welcomePhoto,new OnDoubleClickListener(){
@Override
public void OnSingleClick(View v) {
// TODO Auto-generated method stub
}
@Override
public void OnDoubleClick(View v) {
// TODO Auto-generated method stub
startActivity(IntentHelper.getInstance().getIntent(EntryActivity.this, FinderActivity.class));
}});
}
private interface OnDoubleClickListener {
public void OnSingleClick(View v);
public void OnDoubleClick(View v);
}
public static void registerDoubleClickListener(View view, final OnDoubleClickListener listener){
if(listener==null) return;
view.setOnClickListener(new View.OnClickListener() {
private static final int DOUBLE_CLICK_TIME = 350; //internal time is 350 ms
private boolean waitDouble = true;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
listener.OnSingleClick((View)msg.obj);
}
};
//wait for double click
public void onClick(final View v) {
if(waitDouble){
waitDouble = false; //
new Thread(){
public void run() {
try {
Thread.sleep(DOUBLE_CLICK_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(!waitDouble){
waitDouble = true;
Message msg = handler.obtainMessage();
msg.obj = v;
handler.sendMessage(msg);
}
}
}.start();
}else{
waitDouble = true;
listener.OnDoubleClick(v); //执行双击
}
}
});
}
ANR的问题解决,具体为何会出现ANR,上网查一查为何 Key dispatching timed out
参考资料:
http://www.cnblogs.com/lyout/archive/2011/12/28/2304758.html