如何生成堆栈的Dump?
有下面3种方法,可以得到Java系统的堆栈信息。
1、给JVM发生信号
UNIX/Linux: kill -3 <pid>
Windows: Ctrl + Break
2、JVM运行时,内部错误引发显示堆栈信息
3、使用debug工具或者Java程序调用
在Java debuger中输入命令where,或用如下方法可以得到部分的堆栈信息:
Thread.dumpStack()
Throwable.printStackTrace()
得到堆栈信息后,第一件事情就是找出当前的执行线程、找出Runnable的线程、检查monitors。
通常,如果系统停滞了,需要检查堆栈信息确认是否死锁了。
一个很忙的系统,跟踪堆栈信息时,最好能多次生成堆栈信息,这样才能容易跟踪各种分支情况。
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
handerHandler.removeMessages(0);//如果不在这里把消息从列队里删除,则在后台里继续发消息。
}
private TextView textView1;
public static int add;
private Handler handerHandler = new Handler() {
/*
* (non-Javadoc)
* @see android.os.Handler#handleMessage(android.os.Message)
*/
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
// textView1.setText("add");
textView1.setText(""+add+"");//不这么写,像上面那么写会出错,程序运行时强制关闭。
++add;
removeMessages(0);
sendEmptyMessageDelayed(0, 5000);
Log.e("I AM HANDLER", "I AM TEST>>>>>>>>>>>>>>>>>>>>>>>O");
break;
case 1:
break;
case 3:
break;
case 4:
break;
}
super.handleMessage(msg);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
handerHandler.sendEmptyMessage(0);//这里发送了一个空的消息0到MessageQueue,也可以用下面2种的方法。
// Message msg = new Message();
// msg.what=0;
// handerHandler.sendMessage(msg);
//这用方法比上面那种Message的获取方法节省内部空间
// Message msg=handerHandler.obtainMessage();
// msg.arg1=0;
// handerHandler.sendMessage(msg);
}
这个一般是上传的时候点了取消造成的。
cd /Users/<用户名>/.itmstransporter/UploadTokens
里面会有个文件,把内容清空再保存,或者直接删除好像也可以。