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)
浙公网安备 33010602011771号