项目中出现 ANR

项目中出现了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值