android app崩溃后自动重启
2017-07-05 13:51
323 查看
1.偶然发现项目因为一场崩溃后,自动重启到上一界面。因为未知原因,重启后fragment显示有误,需要杀死进程后才能正常适应app。悲剧的是,因为马上就重启进程
了,导致LOG中看不到异常原因。非常不好调试。
2.经过查资料得知,这些都是google的一种策略,当app崩溃后,会自动根据栈里面的activity的顺序,重启栈顶activity。
3.有的手机保留了这个功能,有的手机估计是定制的原因,会屏蔽掉这个功能,导致以前我没有注意这个现象。
4.避免无故重启带来的bug,让app崩溃后自动关闭。
1)、首先在在application 自定义异常处理类。
2)、在自定义的处理类中关闭栈中的activity,然后杀死当前app进程。此处result 是崩溃异常的信息。
此处采用atcivity生命回调监听方法,在android14版本以上有效。
了,导致LOG中看不到异常原因。非常不好调试。
2.经过查资料得知,这些都是google的一种策略,当app崩溃后,会自动根据栈里面的activity的顺序,重启栈顶activity。
3.有的手机保留了这个功能,有的手机估计是定制的原因,会屏蔽掉这个功能,导致以前我没有注意这个现象。
4.避免无故重启带来的bug,让app崩溃后自动关闭。
1)、首先在在application 自定义异常处理类。
// 以下用来捕获程序崩溃异常 Thread.setDefaultUncaughtExceptionHandler(restartHandler); // 程序崩溃时触发线程 registerActivityListener();//activity管理类
2)、在自定义的处理类中关闭栈中的activity,然后杀死当前app进程。此处result 是崩溃异常的信息。
public Thread.UncaughtExceptionHandler restartHandler = new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread thread, Throwable ex) { //下面为调试用的代码,发布时可注释 Writer info = new StringWriter(); PrintWriter printWriter = new PrintWriter(info); ex.printStackTrace(printWriter); Throwable cause = ex.getCause(); while (cause != null) { cause.printStackTrace(printWriter); cause = cause.getCause(); } printWriter.flush(); printWriter.close(); String result = info.toString(); Log.i("sss",result); for (int i=0;i<activities.size();i++){ Log.i("sss",activities.get(i).getLocalClassName()); if (activities.get(i)!=null) activities.get(i).finish(); } android.os.Process.killProcess(android.os.Process.myPid()); } };3)、activty管理,一般方法是在activity的基类中,在oncreate中 把activity添加到list数组中,再在ondestry中删除remove这个activity。
此处采用atcivity生命回调监听方法,在android14版本以上有效。
private void registerActivityListener() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { /** * 监听到 Activity创建事件 将该 Activity 加入list */ activities.add(activity); } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { if (null==activities&&activities.isEmpty()){ return; } if (activities.contains(activity)){ /** * 监听到 Activity销毁事件 将该Activity 从list中移除 */ activities.remove(activity); } } }); } }每个activity,从创建到销毁都会回调这个方法,可以避免有的activity不继承基类等。
相关文章推荐
- 【Android】App应用崩溃(Crash/Force Close)之后如何让它自动重启?
- Android开发之app崩溃后捕获异常或自动重启
- Android APP崩溃上传日志到服务器并且重启!
- Android5.1.1源码 - App服务进程被杀后自动重启的原因
- Android 如何自定义CrashHandler与崩溃后自动重启
- Android APP崩溃上传日志到服务器并且重启
- app崩溃后自动重启
- 解决Android后台清理APP后,程序自动重启的问题
- app崩溃后捕获异常或自动重启
- app崩溃后捕获异常或自动重启
- app崩溃后捕获异常或自动重启
- Android学习杂记(四):Android应用遭遇错误导致崩溃之后自动重启
- Android实现App自动重启
- APP崩溃后自动重启
- Android崩溃后重启App心得
- Android App崩溃上传日志到服务器并且重启!
- android app在系统重启绕过USB授权对话框,自动获取USB权限
- 【Android】利用 ACRA 实现在规定时间内崩溃次数超过规定值就自动清理 APP 数据
- Android 开机自动重启App代码
- Android APP进程保护,在APP进程异常崩溃后能够重启