android app崩溃后自动重启
1.偶然发现项目因为一场崩溃后,自动重启到上一界面。因为未知原因,重启后fragment显示有误,需要杀死进程后才能正常适应app。悲剧的是,因为马上就重启进程
了,导致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() {@Overridepublic 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() {@Overridepublic void onActivityCreated(Activity activity, Bundle savedInstanceState) {/*** 监听到 Activity创建事件 将该 Activity 加入list*/activities.add(activity);}@Overridepublic void onActivityStarted(Activity activity) {}@Overridepublic void onActivityResumed(Activity activity) {}@Overridepublic void onActivityPaused(Activity activity) {}@Overridepublic void onActivityStopped(Activity activity) {}@Overridepublic void onActivitySaveInstanceState(Activity activity, Bundle outState) {}@Overridepublic void onActivityDestroyed(Activity activity) {if (null==activities&&activities.isEmpty()){return;}if (activities.contains(activity)){/*** 监听到 Activity销毁事件 将该Activity 从list中移除*/activities.remove(activity);}}});}}
每个activity,从创建到销毁都会回调这个方法,可以避免有的activity不继承基类等。
android app崩溃后自动重启相关推荐
- android 程序崩溃后自动重启,Android 应用Crash 后自动重启的方法小结
前提 首先,我们肯定要在Application里面注册一个CrashHandler,监听应用crash public class TestApplication extends MultiDexApp ...
- android 程序崩溃后自动重启,【Android】App应用崩溃(Crash/Force Close)之后如何让它自动重启?...
英文原文: Auto Restart application after Crash/Force Close in Android. 手机上的Android应用,经常会出现"Force Cl ...
- app崩溃后自动重启
android 引用:http://blog.csdn.net/caiwenfeng_for_23/article/details/41184353 package com.tan.abnormalr ...
- android 应用自动重启,Android 应用崩溃后自动重启的方法
public class HKApplication extends Application { private List activityList = new ArrayList(); @Overr ...
- app闪退后重启_Android app 如何实现崩溃后自动重启
Android app 如何实现崩溃后自动重启 由于有很多场景需要让自己的app一直保持运行状态,比如客户的launcher,或者定制app. 都希望在自己的app崩溃之后还可以自重启. 对于这样子 ...
- 华为手机崩溃后自动重启
一.华为.vivo手机的App崩溃后,会特定情况下会自动重启App. 特定情况: 1.如果Activity1---->Activity2,在Activity2崩溃,则,重新走Applicatio ...
- Android 应用Crash 后自动重启
前提 首先,我们肯定要在Application里面注册一个CrashHandler,监听应用crash public class TestApplication extends MultiDexApp ...
- Explorer.exe崩溃后自动重启任务栏托盘区图标丢失
相信很多Windows用户都碰到过这种情况:运行某个程序时出现意外错误,导致外壳程序Explorer.exe崩溃而发生重启(即Explorer.exe被关闭后重新运行),任务栏也在消失后重新生成,但应 ...
- android 应用自动重启,Android:如何在“强制关闭”后自动重启应用程序?
Android:如何在"强制关闭"后自动重启应用程序? 在Android应用程序中,如果我们没有得到正确的例外,我们通常会收到"强制关闭"错误. 如果强行关闭, ...
最新文章
- Centos7搭建k8s环境教程,一次性成功,收藏了!
- java 图片不更新,图片下传页面不能及时更新,求解
- 读博笔记(浏览器兼容性测试工具)
- ant 走马灯面板指示显示不出来_触摸屏报警信息显示设置方法
- 表单设置默认值_你还不知道表单怎么设计吗?看这里!
- 一些php+mysql的开源网上商城
- CCNA 学习笔记(七)--交换知识(VLAN VTP TRUNK)
- uniapp 压缩图片(微信小程序)
- 关于如何实现一个至简的麻将模拟程序的思考
- ArcEngine符号化——文本符号
- 解读常见传感器的CFA排列(彩色滤色矩阵,Color Filter Array)
- 对比excel与python 的分列处理方式
- linux系统盘ssd,Linux系统下如何使用SSD固态硬盘
- 四大盈利互联网经营理念
- 【Python网络爬虫】基本原理
- anaconda的详细配置安装
- Python3 如何处理 emoji 表情
- Kettle 将文本文件转为excel输出
- SEO没有效果,你是否浅尝辄止了?
- 高通WLAN框架学习(11)-- 低功耗接口和Wi-Fi定位系统