如何设置当程序出现异常后进行重启
2017-05-10 18:19
288 查看
主要有三步
一、AndroidManifest.xml配置Application
二、在Application初始化CrashHandler(异常统一捕获)
三、CrashHandler
要测试可以增加一个按钮,响应“ int i = 0/0 ; ”就可以测试一、AndroidManifest.xml
这个主要是“ android:name=".BaseApplication" ”其它代码可以忽略
<?xml version="1.0" encoding="utf-8"?>
二、Application
import android.app.Application; import android.content.Context; /** * 项目名称:sanhemu * 类名称:BaseApplication * 类描述:Application基础类 * 创建人: wjl * 创建时间: 2017-05-10 18:00:17 */ public class BaseApplication extends Application { private Context sContext; @Override public void onCreate() { super.onCreate(); sContext = getApplicationContext(); initErrorHandler();//当程序出现异常后,进行重启(需要有启动页才能用) } private void initErrorHandler(){ CrashHandler crashHandler = CrashHandler.getInstance(); crashHandler.init(); crashHandler.switchCrashActivity(getContext()); } public Context getContext() { return sContext; } }
三、CrashHandler
import android.content.Context; import android.content.Intent; import android.os.Looper; import android.util.Log; import android.widget.Toast; import java.lang.Thread.UncaughtExceptionHandler; /** * 项目名称:sanhemu * 类名称:CrashHandler * 类描述:异常统一捕获 * UncaughtException处理类,当程序发生Uncaught异常的时候, * 由该类来接管程序,并记录发送错误报告. * 需要在Application中注册,为了要在程序启动器就监控整个程序。 * 创建人:wjl * 创建时间:2017-05-10 18:05:01 */ public class CrashHandler implements UncaughtExceptionHandler { private static final String TAG = "CrashHandler"; // CrashHandler实例 private static CrashHandler instance; // 程序的Context对象 private Context context; /** 保证只有一个CrashHandler实例 */ private CrashHandler() { } /** 获取CrashHandler实例 ,单例模式 */ public static CrashHandler getInstance() { if (instance == null) instance = new CrashHandler(); return instance; } /** * 初始化 */ public void init() { // 设置该CrashHandler为程序的默认处理器 Thread.setDefaultUncaughtExceptionHandler(this); } /* * 切换发生Crash所在的Activity */ public void switchCrashActivity(Context context) { this.context = context; } /** * 当UncaughtException发生时会转入该函数来处理(当应用出现异常后进行重启应用) */ @Override public void uncaughtException(Thread thread, Throwable ex) { // 使用Toast来显示异常信息 new Thread() { @Override public void run() { Looper.prepare(); Toast.makeText(context, "很抱歉,程序出现异常,3秒后将重启.", Toast.LENGTH_LONG).show(); Looper.loop(); } }.start(); try { Thread.sleep(3000); restartApp(); } catch (InterruptedException e) { Log.e(TAG, "error : ", e); } } private void restartApp(){ //有“_”是因为项目有备置androidannotations,如果“MainActivity_.class”不正确,程序会一直卡住 Intent intent = new Intent(context,MainActivity_.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); android.os.Process.killProcess(android.os.Process.myPid()); //结束进程之前可以把你程序的注销或者退出代码放在这段代码之前 } }
相关文章推荐
- android 中处理崩溃异常并重启程序出现页面重叠的问题
- 【转】Android 中处理崩溃异常并重启程序出现页面重叠的问题
- android 中处理崩溃异常并重启程序出现页面重叠的问题
- .NET2003安裝出现一直重启问题和SQL 2000安装出现“以前进行的程序安装创建了挂起的文件操作。运行程序之前,必须重新起动计算机。”~[解决方案]
- 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: GetLzdtArticleResult。InnerException 消息是“反序列化对象 属于类型 lzdt.DTO.Dtolzdt[] 时出现错误。读取 XML 数据时,超出最大
- 如何让程序异常退出后重启
- 混淆后的程序Monkey测试出现crash如何进行改Bug
- 如何在Java程序出现异常时输出其文件和行号
- 运行程序选择总是重启tomcat后,如何修改设置。
- 如何设置linux在出现kernel panic后自动重启 (ZT)
- 养成在程序中对可能出现的异常进行处理的习惯
- 运行mapreduce程序时出现异常java.lang.RuntimeException: java.lang.ClassNotFoundException的原因
- VC中如何设置程序优先级
- cmd命令对java程序进行编译时出现:“编码GBK的不可映射字符”两种解决方法,以及dos下帮助文档的制作
- VS2010如何设置使得可以是程序利用argv参数来运行
- 如何设置delphi程序托盘图标
- Windows8系统如何打开任务栏和导航属性进行一些设置
- 在linux下如何使用Makefile对fortran程序进行编译
- C#程序如何实现设置系统WIFI共享
- Linux下在程序中如何进行繁体中文和简体中文的转换