Android捕获全局异常

程序避免不了出现bug,导致程序崩溃,为了尽量不影响用户体验,可以全局捕获异常

效果图

  • 异常捕获处理前

  • 异常捕获处理后(将程序重新启动)

捕获异常的工具类

package com.example.kongqw.exceptiondemo;import android.content.Context;import android.support.v7.internal.app.ToolbarActionBar;import android.util.Log;import android.widget.Toast;/** * Created by kongqw on 2015/11/3. */public class KqwException implements Thread.UncaughtExceptionHandler {    private static KqwException myCrashHandler;    private Context mContext;    private KqwException(Context context) {        mContext = context;    }    public static synchronized KqwException getInstance(Context context) {        if (null == myCrashHandler) {            myCrashHandler = new KqwException(context);        }        return myCrashHandler;    }    public void uncaughtException(Thread thread, Throwable throwable) {        long threadId = thread.getId();        String message = throwable.getMessage();        String localizedMessage = throwable.getLocalizedMessage();        Log.i("KqwException", "------------------------------------------------------");        Log.i("KqwException", "threadId = " + threadId);        Log.i("KqwException", "message = " + message);        Log.i("KqwException", "localizedMessage = " + localizedMessage);        Log.i("KqwException", "------------------------------------------------------");        throwable.printStackTrace();        Log.i("KqwException", "------------------------------------------------------");        // TODO 下面捕获到异常以后要做的事情,可以重启应用,获取手机信息上传到服务器等        Log.i("KqwException", "------------------应用被重启----------------");        // 重启应用        mContext.startActivity(mContext.getPackageManager().getLaunchIntentForPackage(mContext.getPackageName()));        //干掉当前的程序        android.os.Process.killProcess(android.os.Process.myPid());    }}

使用

在Application下添加Handler

注册Application

在清单文件下添加name属性

<application  …… android:name=".InitApplication" …… >    <activity  …… >        <intent-filter>            ……        </intent-filter>    </activity></application>

Application

package com.example.kongqw.exceptiondemo;import android.app.Application;/** * Created by kongqw on 2015/11/3. */public class InitApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        KqwException handler = KqwException.getInstance(this);        Thread.setDefaultUncaughtExceptionHandler(handler);    }}

测试类

package com.example.kongqw.exceptiondemo;import android.app.Activity;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.View;import android.view.Menu;import android.view.MenuItem;import android.widget.Toast;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void bug(View view) {        Toast.makeText(this, "程序崩溃", Toast.LENGTH_SHORT).show();        // 除数为0 导致程序崩溃        int a = 1 / 0;    }}

XML布局

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context=".MainActivity" tools:showIn="@layout/activity_main">    <Button  android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="bug" android:text="点击程序崩溃" /></RelativeLayout>

更多相关文章

  1. android中HttpURLConnection调用getResponseCode()时崩溃 解决方
  2. Android定义的路径全局变量
  3. 代码:android崩溃日志收集和处理
  4. 链接器解析多重定义的全局变量
  5. android中HttpURLConnection调用getResponseCode()时崩溃 解决方
  6. Android(安卓)旋转屏幕捕获当前屏幕的状态
  7. Android(安卓)全局异常处理(二)
  8. android 捕捉app错误信息
  9. Android全局异常统一处理

随机推荐

  1. Android 布局 LinearLayout与RelativeLay
  2. 关于Android学习要问的一些问题
  3. Android中popWindow弹出菜单的编写
  4. Android(java)学习笔记106:Android XML解析
  5. android中的命名空间
  6. Android.mk详解
  7. android architect
  8. Android GridView九宫图
  9. Android Studio 导出 .aar包的操作流程
  10. Android 图形系统SurfaceFlinger