做开发的过程中,搞着搞着出现异常了,这可怎么办

前言

在做android项目开发时,大家都知道如果程序出错了,会弹出来一个强制退出的弹 出框,这个本身没什么问题,但是这个UI实在是太丑了,别说用户接受不了,就连 我们自己本身可能都接受不了。虽然我们在发布程序时总会经过仔细的测试,但是 难免会碰到预料不到的错误。

顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找
https://github.com/xiangjiana/Android-MS
(VX:mm14525201314)

今天就来自定义一个程序出错时的处理,类似iphone的闪退。(虽然闪退也是用户不 愿意看到的,但是在用户体验上明显比那个原生的弹窗好多了) 废话不多说,直接上代码:

CrashHandler

  /**
   * 自定义的 异常处理类 , 实现了 UncaughtExceptionHandler接口
   *
   */
    public class CrashHandler implements UncaughtExceptionHandler {
      // 需求是 整个应用程序 只有一个 MyCrash-Handler
      private static CrashHandler INSTANCE ;
      private Context context; 

      //1.私有化构造方法
      private CrashHandler(){ 

      }

      public static synchronized CrashHandler getInstance(){
         if (INSTANCE == null)
             INSTANCE = new CrashHandler();
         return INSTANCE;
      }

      public void init(Context context){
         this.context = context;
      }

      public void uncaughtException(Thread arg0, Throwable arg1) {
         System.out.println("程序挂掉了 ");
         // 在此可以把用户手机的一些信息以及异常信息捕获并上传,由于UMeng在 这方面有很程序的api接口来调用,故没有考虑
         //干掉当前的程序
         android.os.Process.killProcess(android.os.Process.myPid( ));
      }
  }

CrashApplication

  /**
   * 在开发应用时都会和Activity打交道,而Application使用的就相对较少了。
   * Application是用来管理应用程序的全局状态的,比如载入资源文件。
   * 在应用程序启动的时候Application会首先创建,然后才会根据情况(Intent)启 动相应的Activity或者Service。
   * 在本文将在Application中注册未捕获异常处理器。
   */
    public class CrashApplication extends Application {
       @Override
       public void onCreate() {
          super.onCreate();
          CrashHandler handler =  CrashHandler.getInstance();
          handler.init(getApplicationContext());
          Thread.setDefaultUncaughtExceptionHandler(handler);
       }
   }

AndroidManifest.xml中注册

  <?xml version="1.0" encoding="utf-8"?>
  <manifest xmlns:android="http://schemas.android.com/apk/res/andr oid"package="org.wp.activity" android:versionCode="1" android:ve rsionName="1.0">
  <application android:icon="@drawable/icon" android:label="@s tring/app_name" android:name=".CrashApplication" android:debuggable="tru e">
      <activity android:name=".MainActivity" android:label="@s tring/app_name">
           <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category. LAUNCHER" />
           </intent-filter>
      </activity>
    </application>
    <uses-sdk android:minSdkVersion="8" />
  </manifest>

至此,可以测试下在出错的时候程序会直接闪退,并杀死后台进程。当然也可以自 定义一些比较友好的出错UI提示,进一步提升用户体验。

顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找
https://github.com/xiangjiana/Android-MS
(VX:mm14525201314)

原文地址:https://blog.51cto.com/14541311/2472342

时间: 2024-08-01 13:18:47

做开发的过程中,搞着搞着出现异常了,这可怎么办的相关文章

【10.2.3】ArcGIS Runtime for Android搭建开发环境过程中问题详解

一.Visual Studio Ultimate2012安装过程问题 1.问题描述 安装完成后,您将看到一条消息,指示安装程序已完成,但并不是所有的功能具有已正确安装,以及以下警告消息: Microsoft Web Deploy 3.0 所需的证书不在有效期内根据当前系统时钟或签名文件中的时间戳验证时. 2.解决方案 修改电脑系统时间为2013年7月,断网后重新安装,成功后再联网. Visual Studio Ultimate2012激活密钥:RBCXF-CVBGR-382MK-DFHJ4-C6

讲一下数据分析有哪些步骤,在你做项目的过程中哪个步骤需要花费的时间最久?为什么?

数据分析的步骤 1.定义问题,明确需要解决的需求是什么. 2.问题拆分.对于最终需要解决或探索的问题,进行细分,拆分成不同层面的问题. 3.确定指标.根据不同的细分问题,确定需要探索的指标 4.数据收集.收集整理分析项目所需的数据. 5.数据清洗.删除重复数据,异常值,缺失值处理她,特征筛选,数据归一化或标准化处理. 6.数据分析.对相关数据指标进行描述分析,利用可视化进行探索性分析. 7.趋势预测.根据数据建立数据挖掘模型,利用历史数据预测未来数据,并提升预测精度. 8.撰写报告.梳理分析结论

关于线程池运行过程中,业务逻辑出现未知异常导致线程中断问题反思

最近在项目研发中的关于线程池应用过程中由于业务逻辑异常导致的线程中断,但程序未中断导致的脏数据问题  话不多说,在最近最新的一个版本发布过程中,业务需要,我们要定期去给客户预留出可用的资源数据,提供客户使用,在版本即将上线前一周测试过程中,遇到的预留资源数据跟实际数据不匹配,刚开始反复检查代码,通过日志调试一直无果,经过不懈努力,最终终于发现是由于线程在跑业务时,抛出未知异常,当前线程中断,然而主程序并未异常,导致最终响应的数据与实际不符.下面我就简答举例说明下这个问题 1.获取资源数据demo

【webservice】818开发webservice过程中遇到的异常

还是关于axis2的知识哦.webservice的开发,包括服务端的开发.客户端的开发.在"服务端的开发"方面通常是部署好axis2的环境.完成工程的设计与编程.打包发布,一般来说不会出现异常(前提是基本功扎实),然而,在"客户端的开发"方面就不好说了.下面就简单说一下客户端开发可能会出现的问题吧. 1.生成客户端代码时报错.例如用axis2的生成工具去搞axis1的wsdl(这个可以参考前面的博文哦),报错信息是org.apache.axis2.wsdl.code

用AngularJS开发的过程中如何查看Scope内容

scope的继承就好比JS的原型链继承,深入理解Scope:http://www.lovelucy.info/understanding-scopes-in-angularjs.html 通过查看官网文档:http://docs.angularjs.cn/guide/scope(这个链接不知道为什么直接点击会显示Not Found,首先访问http://docs.angularjs.cn/api,点击导航栏的“英文文档”在下拉菜单中选择“Developer Guide”,左边导航栏中选择“Sco

开发android过程中eclipse闪退解决

有一次eclipse崩溃了,然后再双击就无法打开了.换了几个版本也是如此. 后来找到了这个方法:删除文件 [workspace]/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi 原来是workspace的问题. 当然还有一个办法就是换一个workspace.

WebStorm开发ReactNative过程中导入插件设置智能提示

1.clone项目到本地 git clone https://github.com/virtoolswebplayer/ReactNative-LiveTemplate 2.添加ReactNative.jar file -> import settings -> ReactNative.jar 3.ok完事 另外,如下图语言版本设置,及支持库勾选 原文地址:https://www.cnblogs.com/hzglearn/p/8856744.html

maven 学习:为什么要使用maven,maven使用过程中的一些参数

Maven是一个基于Java平台的项目构建工具. 设计的出发点: 在进行软件开发的过程中,无论什么项目,采用何种技术,使用何种编程语言,我们要重复相同的开发步骤:编码,编译,测试,生成文档,打包发布.实际上除了编写源代码,其他步骤完全是重复一些琐碎的工作,这些琐碎的工作就是构建. 那为什么让软件开发人员去重复这些工作?开发人员的主要任务应该是关注商业逻辑并去实现它,而不是把时间浪费在学习如何在不同的环境中去打包,发布,Maven正是为了将开发人员从这些重复性的任务中解脱出来而诞生的. Maven

Python爬虫(图片)编写过程中遇到的问题

最近我突然对网络爬虫开窍了,真正做起来的时候发现并不算太难,都怪我以前有点懒,不过近两年编写了一些程序,手感积累了一些肯定也是因素,总之,还是惭愧了.好了,说正题,我把这两天做爬虫的过程中遇到的问题总结一下: 需求:做一个爬虫,爬取一个网站上所有的图片(只爬大图,小图标就略过) 思路:1.获取网站入口,这个入口网页上有很多图片集合入口,进入这些图片集合就能看到图片链接了,所以爬取的深度为2,比较简单:2.各个子图片集合内所包含的图片链接有两种形式:一种是绝对图片路径(直接下载即可),另一种的相对