这是一个Android问题,也是一个Java问题。
我在活动中发现了一个自定义线程异常处理程序,如下所示:
public class MainActivity extends FlutterActivity {
public static String TAG = "MainActivity";
Thread thread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler(this));
thread = new Thread(new Runnable() {
public void run() {
try {
TimeUnit.SECONDS.sleep(25);
crashMe(); //Makes app crash
} catch (Exception exception) {
thread.start();
public void crashMe() {
throw new NullPointerException();
public void crashMe2() {
runOnUiThread(new Runnable() {
public void run() {
throw new NullPointerException();
}
正如您所看到的,在超时之后调用
crashMe()
确实会使异常处理程序被调用。然而,一些颤振引擎的崩溃不会被我的处理程序和应用程序简单地关闭。就像这个:
2020-03-04 13:36:08.938 3901-3901/com.demo.flutter_app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.demo.flutter_app, PID: 3901
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.DisplayAdjustments android.view.Display.getDisplayAdjustments()' on a null object reference
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1900)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1636)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7946)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1092)
at android.view.Choreographer.doCallbacks(Choreographer.java:893)
at android.view.Choreographer.doFrame(Choreographer.java:812)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1078)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7625)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
其中使用的是实验颤振网视图。
我怎么能绝对捕捉到所有的撞车?我希望能够在任何时候重新启动应用程序,但是有些崩溃是无法处理的。
更新:
下面是另一个它无法处理的崩溃:
[+1520 ms] F/libc (31305): Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 31351 (RenderThread), pid 31305 (com.example.bug)
[ +184 ms] *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
[ ] Build fingerprint: 'Dragon_Touch/M7/M7:9/PPR2.181005.003/ysq20190426:user/release-keys'
[ ] Revision: '0'
[ ] ABI: 'arm64'
[ ] pid: 31305, tid: 31351, name: RenderThread >>> com.example.bug <<<
[ ] signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
[ ] Abort message: 'Failed to set damage region on surface 0x7a1391d400, error=EGL_BAD_ACCESS'
[ ] x0 0000000000000000 x1 0000000000007a77 x2 0000000000000006 x3 0000000000000008
[ ] x4 feff71647164636d x5 feff71647164636d x6 feff71647164636d x7 7f7f7f7f7f7f7f7f
[ ] x8 0000000000000083 x9 0000007abf876718 x10 fffffff87ffffbdf x11 0000000000000001
[ ] x12 0000007a1f57ebd0 x13 ffffffffffffffff x14 ffffffffff000000 x15 ffffffffffffffff
[ ] x16 0000007abf8b22b0 x17 0000007abf7f0298 x18 0000007a1f57e3ba x19 0000000000007a49
[ ] x20 0000000000007a77 x21 0000000000000083 x22 0000007a1a8a1bb0 x23 0000007a1f57f1b0
[ ] x24 0000000000000000 x25 0000007a1a8a1b24 x26 0000007a1f57f198 x27 0000007a1a8a1b22
[ +2 ms] x28 0000000000000000 x29 0000007a1f57eaf0
[ +1 ms] sp 0000007a1f57eab0 lr 0000007abf7e4a50 pc 0000007abf7e4a7c
[ +82 ms] backtrace:
[ ] #00 pc 0000000000021a7c /system/lib64/libc.so (abort+124)
[ ] #01 pc 00000000000080f8 /system/lib64/liblog.so (__android_log_assert+296)
[ ] #02 pc 0000000000486e64 /system/lib64/libhwui.so (android::uirenderer::renderthread::EglManager::damageFrame(android::uirenderer::renderthread::Frame const&, SkRect const&)+180)
[ ] #03 pc 0000000000480858 /system/lib64/libhwui.so (android::uirenderer::skiapipeline::SkiaOpenGLPipeline::draw(android::uirenderer::renderthread::Frame const&, SkRect const&, SkRect const&,
android::uirenderer::FrameBuilder::LightGeometry const&, android::uirenderer::LayerUpdateQueue*, android::uirenderer::Rect const&, bool, bool, android::uirenderer::BakedOpRenderer::LightInfo const&,
std::__1::vector<android::sp<android::uirenderer::RenderNode>, std::__1::allocator<android::sp<android::uirenderer::Re
[ +1 ms] #04 pc 0000000000108728 /system/lib64/libhwui.so (android::uirenderer::renderthread::CanvasContext::draw()+192)
[ ] #05 pc 0000000000485854 /system/lib64/libhwui.so