1.UnCaughtExceptionHandler用法

package com.example.suruixue.myapplication;

import android.content.Intent;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class SplashActivity extends AppCompatActivity implements Thread.UncaughtExceptionHandler{
private String TAG = "SplashActivity";
private TextView mText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e(TAG,"srx-oncreate-show SlpahActivity");
        setContentView(R.layout.activity_splash);
        mText = findViewById(R.id.splash_text);
        Log.d(TAG,"srx---oncreate-tid="+Thread.currentThread().getId());

        Thread.setDefaultUncaughtExceptionHandler(this);
        //myInit();
    }

    private void myInit(){
        Thread a1= new Thread(new Runnable() {
            @Override
            public void run() {
              Log.d(TAG,"srx---a1thread-out-tid="+Thread.currentThread().getId());
               String name = null;
               int mLeng = name.length();
            }
        });
        a1.start();

    }

    @Override
    protected void onStart() {
        Log.e(TAG,"srx--onStart");
        super.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
        myInit();
        Log.e(TAG,"srx--onResme00000");

    }

    @Override
    protected void onStop() {
        Log.e(TAG,"srx--onStop");
        super.onStop();
    }

    @Override
    protected void onPause() {
        Log.e(TAG,"srx--onPause");
        super.onPause();
    }

    @Override
    protected void onDestroy() {
        Log.e(TAG,"srx--onDestroy");
        super.onDestroy();
    }

    @Override
    public void uncaughtException(Thread t, Throwable e) {
        Log.e(TAG,"srx-line96-uncaughtException"+e);
        e.printStackTrace();
    }

}

现象是系统不崩溃:

运行后日志:

02-12 02:44:37.795 29594 29594 D SplashActivity: srx---oncreate-tid=2
02-12 02:44:37.801 29594 29594 E SplashActivity: srx--onStart
02-12 02:44:37.811 29594 29594 E SplashActivity: srx--onResme00000
02-12 02:44:37.815   277   277 D vndksupport: Loading /vendor/lib/hw/gralloc.sp9832e.so from current namespace instead of sphal namespace.
02-12 02:44:37.816   277   277 I gralloc : gralloc_register_buffer hnd=0xaf037680, share_fd=54, share_attr_fd=55, magic=51647890, format=1, internal_format=1, byte_stride=1920, flags=4, usage=0x933, size=1843200, width=480, height=960, internalWidth=480, internalHeight=960, stride=480, base=0xaa932000, writeOwner=0, attr_base=0xffffffff, yuv_info=1, fd=-1, buf_idx=0, offset=0, min_pgsz=4096, phyaddr=0
02-12 02:44:37.818   234   248 W YLOG    : [02-12 02:44:37.817] ylog<critical> android cacheline write wrong 24535 -> 5611
02-12 02:44:37.811 29594 29610 D SplashActivity: srx---a1thread-out-tid=275
--------- beginning of crash    //在空指针处会先报空指针异常
02-12 02:44:37.821 29594 29610 E AndroidRuntime: FATAL EXCEPTION: Thread-2
02-12 02:44:37.821 29594 29610 E AndroidRuntime: Process: com.example.suruixue.myapplication, PID: 29594
02-12 02:44:37.821 29594 29610 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
02-12 02:44:37.821 29594 29610 E AndroidRuntime:  at com.example.suruixue.myapplication.SplashActivity$1.run(SplashActivity.java:85)
02-12 02:44:37.821 29594 29610 E AndroidRuntime:  at java.lang.Thread.run(Thread.java:764)
02-12 02:44:37.823 29594 29610 D HprofFactory: Create HprofDebugEx
02-12 02:44:37.824 29594 29610 E SplashActivity: srx-line96-uncaughtExceptionjava.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference

//下面是在回调函数uncaughtException()中打印出来的异常,
02-12 02:44:37.825 29594 29610 W System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
02-12 02:44:37.826 29594 29610 W System.err:  at com.example.suruixue.myapplication.SplashActivity$1.run(SplashActivity.java:85)
02-12 02:44:37.826 29594 29610 W System.err:  at java.lang.Thread.run(Thread.java:764)

posted on 2021-05-18 21:47  snowdrop  阅读(223)  评论(0)    收藏  举报