ForceClose异常会使程序崩溃并弹出xxx已停止的对话框,像下标越界 空指针等问题都会抛出这个异常,这种异常主要通过Thread.UncaughtExceptionHandler这个类来捕获异常,只需实现这个接口重写uncaughtException(Thread arg0, Throwable arg1)
public class MainActivity extends Activity implements Thread.UncaughtExceptionHandler, View.OnClickListener {
private List<String> mList = new ArrayList<String>();
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("tag", "--->>onCreate");
initView();
// 设置处理异常的handler
Thread.setDefaultUncaughtExceptionHandler(this);
}
/**
* 初始化控件
*/
private void initView() {
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(this);
}
@Override
public void uncaughtException(Thread arg0, Throwable arg1) {
// TODO Auto-generated method stub
Log.i("tag", "截获到forceclose,异常原因为:" + "\n" + arg1.toString() + " Thread:" + arg0.getId());
android.os.Process.killProcess(android.os.Process.myPid());
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.btn:
mList.get(1);// 产生异常
break;
default:
break;
}
}
@Override
protected void onPause() {
super.onPause();
Log.i("tag", "--->onpause");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.i("tag", "--->onstop");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i("tag", "--->ondestroy");
}
}