android遇到异常自动重启代码
来源:互联网 发布:手机登录淘宝达人 编辑:程序博客网 时间:2024/04/28 11:55
先说下为什么要有这个功能
主流的Android版本 如果不人为通过Thread.setDefaultUncaughtExceptionHandler干预异常,系统会关闭当前线程并使用新线程重启应用,而应用并不是从LauncherActivity启动的,而是回退栈中抛出异常的Activity的下面的Activity,比如从MainActivity启动了DiscountActivity,在DiscountActivity抛出了异常,系统会调用MainActivity的onCreate.(这是我通过现象分析的,没有任何根据)
我的项目是个管理类的app,并且没有使用token的方式存储用户信息,一切网络请求通过cookie判断用户是否登录
在系统抛出异常开启新线程后 网络请求不会携带旧线程的cookie,导致返回到MainActivity时的一切网络请求都是非法的,因此只有进入到MainActivity前面打的LoginActivity重新登录才能重新得到cookie从而解决问题.
所以用到了这个功能:android遇到异常自动重启 一切重头再来
再说下这个功能涉及的知识点
这是个涵盖多个知识点的综合性的功能 核心功能有两点:
1.关闭当前线程
2.重启应用
其他附属的功能还可能有
记录日志 弹出友好的提示信息等等
关于这核心的两点 网上关于这个功能的文章很多 也有各种写法,其中一些写法可能是因为Android版本的升级的原因现在已经不再正确
关闭线程有用list记录活动的Activity,退出时循环执行finish的
也有只通过这一句代码关闭线程的
android.os.Process.killProcess(android.os.Process.myPid());
经我测试第二种办法就可实现关闭线程的目的
再说重启应用 分至少三种写法
1.Intent intent = new Intent(this, getTopActivity()); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
2.Intent intent = new Intent(mContext, MainActivity.class); PendingIntent restartIntent = PendingIntent.getActivity(mContext, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK); AlarmManager mgr = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, restartIntent);
3.AlarmManager mgr = (AlarmManager) mAppContext.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(mAppContext, WelcomeActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("crash", true); PendingIntent restartIntent = PendingIntent.getActivity(mAppContext, 0, intent, PendingIntent.FLAG_ONE_SHOT); mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, restartIntent);首先第一种写法在当前Android版本下是错的 无法实现重启应用的目的
接着第二种写法估计也是过时的写法 PendingIntent.getActivity的最后一个参数不正确
只有最后一个写法才是对的 把Intent.FLAG_ACTIVITY_NEW_TASK 设置到intent里
特此总结,记录自己遇到过的坑,也希望对后来者有所帮助最后贴上一个完整可用的版本点击打开链接
0 0
- android遇到异常自动重启代码
- Android 开机自动重启App代码
- App异常自动重启
- android代码重启
- android重启代码
- Android Service被关闭后自动重启,解决被异常kill 服务
- Android Service被关闭后自动重启,解决被异常kill 服务
- Android Service被关闭后自动重启,解决被异常kill 服务
- Android Service被关闭后自动重启,解决被异常kill 服务
- Android Service被关闭后自动重启,解决被异常kill 服务
- Android Service被关闭后自动重启,解决被异常kill 服务
- Android学习 - Service被关闭后自动重启,解决被异常kill 服务
- Android Service被关闭后自动重启,解决被异常kill 服务
- Android开发之app崩溃后捕获异常或自动重启
- android自动重启、关机
- java代码修改服务器自动重启
- Linux 遇到 kernel panic 后可自动重启
- Linux 遇到 kernel panic 后可自动重启
- Angular.js之手动调用$apply()以及$digest()的理解
- python项目练习二:画幅好画
- PL/SQL笔记
- 用WINHEX合并两个或多个BIN文件
- unity 代码修改particle system shape
- android遇到异常自动重启代码
- ubuntu命令整理(包括出错处理)
- 堆内存和栈内存详解(转)
- Android的布局对象
- Android实现左右滑动切换的效果
- MySQL大数据LIMIT优化
- elasticSearch 分词器踩的坑
- python项目练习四:新闻聚合
- Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)