布局
布局中只有一个EditText
MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//把当前activity放进ActivityList中
MyApplication application = (MyApplication) getApplication();
application.activities.add(this);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Toast.makeText(this,1,Toast.LENGTH_SHORT).show();
return super.onTouchEvent(event);
}
}
重写onTouchEvent()方法,用来在页面点击时,让程序崩溃,这里toast一个int类型的值,程序会崩溃
MyApplication
public class MyApplication extends Application {
ArrayList<Activity> activities = new ArrayList<Activity>();
public void finish(){
for(Activity activity:activities){
try {
activity.finish();
} catch (Exception e) {
e.printStackTrace();
}
}
//结束进程
Process.killProcess(Process.myPid());
}
@Override
public void onCreate() {
super.onCreate();
CrashHandler handler = new CrashHandler(this);
//通知Android框架,如果出异常,并且异常没加catch,
//框架调用crashhandler
Thread.setDefaultUncaughtExceptionHandler(handler);
}
}
AndroidManifest
<application
android:name=".MyApplication"
......
CrashHandler
/程序出了异常,没加catch
public class CrashHandler implements Thread.UncaughtExceptionHandler {
MyApplication application;
public CrashHandler(MyApplication application){
this.application = application;
}
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
String errorMessage = throwable.getMessage();
Log.i("CrashHandler","ErrorMessage="+errorMessage);
//1、得到详细异常信息
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
throwable.printStackTrace(printWriter);
errorMessage = stringWriter.toString();
Log.i("CrashHandler","ErrorMessage="+errorMessage);
//2、使用volley发送到服务器
//3、toast提示用户重启
//然而程序已经出异常了,toast显示不出来,应该创建工作线程
new Thread(){
@Override
public void run() {
//工作线程创建looper
Looper.prepare();
Toast.makeText(application,"抱歉,即将重启",Toast.LENGTH_SHORT).show();
Looper.loop();
}
}.start();
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//4、重启
//而程序已经出异常了,不能使用之前的startActivity重启
Intent intent = new Intent(application, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(application,100,intent,Intent.FLAG_ACTIVITY_NEW_TASK);
//application.startActivity(intent);
//5、定时器,2s后执行
AlarmManager alarmManager = (AlarmManager) application.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC,System.currentTimeMillis()+2000,pendingIntent);
//6、结束当前程序的所有activity和进程
application.finish();
}
}
?其中关于PrintWriter的简介