分享到:
点击次数:333  更新时间:2016-10-11 16:24:04  【打印此页】  【关闭
澳门新濠天地娱乐场澳门新濠天地娱乐定制
当前位置:主页 > 新闻动态 > 技术交流 > andoid处理未捕获异常

andoid处理未捕获异常

责任编辑:admin 发布时间:2016-11-11 09:18 浏览次数:

在某些意外的情况下,程序崩溃是我们不想看到的,这时我们可以使用未捕获异常,将日志写在文件里,记录错误信息,防止影响用户体验。
    package com.home.testuncatch; 
     
    import android.app.Activity; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.Button; 
     
    import com.home.testuncaughtexception.R; 
     
    public class MainActivity extends Activity { 
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            MyUncaughtExceptionHandler.getInstance().init(); 
            setContentView(R.layout.main); 
            Button btn = (Button) findViewById(R.id.main_btn); 
            btn.setOnClickListener(new OnClickListener() { 
     
                @Override 
                public void onClick(View v) { 
                    String a = null; 
                    a.length(); 
                } 
            }); 
        } 
    } 
MyUncaughtExceptionHandler:
package com.home.testuncatch; 
 
import java.io.PrintWriter; 
import java.io.StringWriter; 
import java.lang.Thread.UncaughtExceptionHandler; 
 
public class MyUncaughtExceptionHandler implements UncaughtExceptionHandler { 
    private static MyUncaughtExceptionHandler instance; 
 
    public synchronized static MyUncaughtExceptionHandler getInstance() { 
        if (instance == null) { 
            instance = new MyUncaughtExceptionHandler(); 
        } 
        return instance; 
    } 
 
    public void init() { 
        // 设置当前对象为默认的未捕获异常处理器 
        Thread.setDefaultUncaughtExceptionHandler(this); 
    } 
 
    @Override 
    public void uncaughtException(Thread t, Throwable e) { 
        StringWriter stackTrace = new StringWriter(); 
        e.printStackTrace(new PrintWriter(stackTrace)); 
        System.out.println(stackTrace);// 可将错误日志写在文件里 
        System.exit(10); 
    }