全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android application捕获崩溃异常怎么办

Android application捕获崩溃异常怎么办?

通用 application
1、收集所有 avtivity 用于彻底退出应用
2、捕获崩溃异常,保存错误日志,并重启应用

public class HKBaseApplication extends Application {
 // activity对象列表,用于activity统一管理
 private List<Activity> activityList;
 // 异常捕获
 protected boolean isNeedCaughtExeption = true;// 是否捕获未知异常
 private PendingIntent restartIntent;
 private MyUncaughtExceptionHandler uncaughtExceptionHandler;
 private String packgeName;

 @Override
 public void onCreate() {
 super.onCreate();

 activityList = new ArrayList<Activity>();
 packgeName = getPackageName();

 if (isNeedCaughtExeption) {
  cauchException();
 }
 }

 // -------------------异常捕获-----捕获异常后重启系统-----------------//

 private void cauchException() {
 Intent intent = new Intent();
 // 参数1:包名,参数2:程序入口的activity
 intent.setClassName(packgeName, packgeName + ".LoginActivity");
 restartIntent = PendingIntent.getActivity(getApplicationContext(), -1, intent,
  Intent.FLAG_ACTIVITY_NEW_TASK);

 // 程序崩溃时触发线程
 uncaughtExceptionHandler = new MyUncaughtExceptionHandler();
 Thread.setDefaultUncaughtExceptionHandler(uncaughtExceptionHandler);
 }

 // 创建服务用于捕获崩溃异常
 private class MyUncaughtExceptionHandler implements UncaughtExceptionHandler {
 @Override
 public void uncaughtException(Thread thread, Throwable ex) {
  // 保存错误日志
  saveCatchInfo2File(ex);

  // 1秒钟后重启应用
  AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
  mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, restartIntent);

  // 关闭当前应用
  finishAllActivity();
  finishProgram();
 }
 };

 /**
 * 保存错误信息到文件中
 * 
 * @return 返回文件名称
 */
 private String saveCatchInfo2File(Throwable ex) {
 Writer writer = new StringWriter();
 PrintWriter printWriter = new PrintWriter(writer);
 ex.printStackTrace(printWriter);
 Throwable cause = ex.getCause();
 while (cause != null) {
  cause.printStackTrace(printWriter);
  cause = cause.getCause();
 }
 printWriter.close();
 String sb = writer.toString();
 try {
  DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
  String time = formatter.format(new Date());
  String fileName = time + ".txt";
  System.out.println("fileName:" + fileName);
  if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
  String filePath = Environment.getExternalStorageDirectory() + "/HKDownload/" + packgeName
   + "/crash/";
  File dir = new File(filePath);
  if (!dir.exists()) {
   if (!dir.mkdirs()) {
   // 创建目录失败: 一般是因为SD卡被拔出了
   return "";
   }
  }
  System.out.println("filePath + fileName:" + filePath + fileName);
  FileOutputStream fos = new FileOutputStream(filePath + fileName);
  fos.write(sb.getBytes());
  fos.close();
  //文件保存完了之后,在应用下次启动的时候去检查错误日志,发现新的错误日志,就发送给开发者
  }
  return fileName;
 } catch (Exception e) {
  System.out.println("an error occured while writing file..." + e.getMessage());
 }
 return null;
 }

 // ------------------------------activity管理-----------------------//

 // activity管理:从列表中移除activity
 public void removeActivity(Activity activity) {
 activityList.remove(activity);
 }

 // activity管理:添加activity到列表
 public void addActivity(Activity activity) {
 activityList.add(activity);
 }

 // activity管理:结束所有activity
 public void finishAllActivity() {
 for (Activity activity : activityList) {
  if (null != activity) {
  activity.finish();
  }
 }
 }

 // 结束线程,一般与finishAllActivity()一起使用
 // 例如: finishAllActivity;finishProgram();
 public void finishProgram() {
 android.os.Process.killProcess(android.os.Process.myPid());
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # application  # 捕获崩溃  # 详解Android中Application设置全局变量以及传值  # Android Application存取公共数据的实例详解  # Android开发 -- setTag的妙用和The key must be an applicat  # Android开发中避免应用无响应的方法(Application Not Responding、AN  # Android获取应用程序名称(ApplicationName)示例  # Android ApplicationInfo 应用程序信息的详解  # 重启  # 是因为  # 出了  # 错误信息  # 大家多多  # 移除  # 发送给  # 下次  # 列表中  # getApplicationContext  # FLAG_ACTIVITY_NEW_TASK  # super  # implements  # setDefaultUncaughtExceptionHandler  # Thread  # intent  # setClassName  # cauchException 


相关文章: C++用Dijkstra(迪杰斯特拉)算法求最短路径  视频网站app制作软件,有什么好的视频聊天网站或者软件?  制作网站公司那家好,网络公司是做什么的?  山东网站制作公司有哪些,山东大源集团官网?  5种Android数据存储方式汇总  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  学校为何禁止电信移动建设网站?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  平台云上自主建站:模板化设计与智能工具打造高效网站  建站之星与建站宝盒如何选择最佳方案?  建站主机选哪种环境更利于SEO优化?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  建站ABC备案流程中有哪些关键注意事项?  设计网站制作公司有哪些,制作网页教程?  广州商城建站系统开发成本与周期如何控制?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  建站之星安装步骤有哪些常见问题?  网站微信制作软件,如何制作微信链接?  如何撰写建站申请书?关键要点有哪些?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  建站之星展会模板:智能建站与自助搭建高效解决方案  C++时间戳转换成日期时间的步骤和示例代码  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  如何快速辨别茅台真假?关键步骤解析  韩国服务器如何优化跨境访问实现高效连接?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何通过IIS搭建网站并配置访问权限?  公司网站设计制作厂家,怎么创建自己的一个网站?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  装修招标网站设计制作流程,装修招标流程?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  建站之星ASP如何实现CMS高效搭建与安全管理?  如何用腾讯建站主机快速创建免费网站?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  建站主机服务器选购指南:轻量应用与VPS配置解析  音响网站制作视频教程,隆霸音响官方网站?  教学论文网站制作软件有哪些,写论文用什么软件 ?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  上海网站制作开发公司,上海买房比较好的网站有哪些?  孙琪峥织梦建站教程如何优化数据库安全?  建站主机数据库如何配置才能提升网站性能?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  如何通过VPS建站无需域名直接访问?  如何快速查询域名建站关键信息?  表情包在线制作网站免费,表情包怎么弄?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  七夕网站制作视频,七夕大促活动怎么报名?  如何规划企业建站流程的关键步骤?  如何用狗爹虚拟主机快速搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。