Bugly Crash总结

Bugly Crash总结

Java Crash

java.lang.NullPointerException

【Crash场景】:当对象为NULL的时候,再去调用该对象拥有的方法或变量。

【解决办法】:

  1. 执行回调(不管是同步还是异步)方法,需要执行判空操作,因为页面可能已经被销毁。
  2. 封装方法之后,需要对参数执行判空操作,因为你永远也不知道调用者会不会给你传NULL。
  3. 使用switch语句时,需要注意括号内的表达式是否会出现空指针异常。
  4. 网络请求成功失败之后,更新UI时需要执行判空操作,因为页面可能已经被销毁。

java.lang.IndexOutOfBoundsException

【错误日志】:

Index: 0, Size: 0
com.github.mikephil.charting.data.DataSet.getEntryForIndex(DataSet.java:286)

【Crash场景】:当数据集合(数组)的index<0或者index>=size时,再调用get方法。

【解决办法】:

  1. 调用get方法时,请务必判断position的数值是否符合上面的要求。

android.view.WindowManager$BadTokenException

【错误日志】:

Unable to add window -- token android.os.BinderProxy@312cd55a is not valid; is your activity running?

【Crash场景】:

  1. 当Activtiy被销毁之后,Dialog(DialogFragment)还在展示或想要弹出Dialog(DialogFragment)。
  2. Toast在Android7.1.1(API25)上本身的问题。

【解决办法】:

  1. 显示Dialog(DialogFragment)的时候需要先判断activity==null || activity.isFinishing(),如果返回值为true不能显示Dialog。
  2. 参考链接:https://cloud.tencent.com/developer/article/1034223

java.lang.StackOverflowError

【错误日志】:

stack size 8MB
java.lang.Class.isAssignableFrom(Class.java:531)

【Crash场景】:当代码存在递归调用的时候,会陷入死循环,如下场景:

textView.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        textView.setText("");
    }
});

【解决办法】:请根据业务逻辑规避这种情况的出现,需要仔细思考。

android.database.sqlite.SQLiteFullException 未解决

【错误日志】:

database or disk is full (Sqlite code 13), (OS error - 28:No space left on device)
com.tencent.tbs.core.webkit.tencent.TencentWebViewDatabase.getInstance(Unknown Source)

【Crash场景】:设备存储空间不足的时候,仍然执行写入磁盘操作。

【解决办法】:暂无。

java.lang.RuntimeException

startPreview failed 未解决

【错误日志】:

startPreview failed
android.hardware.Camera.startPreview(Native Method)
com.google.zxing.client.android.camera.CameraManager.startPreview(CameraManager.java)

【Crash场景】:不清楚。

【解决办法】:暂无。

Canvas: trying to draw too large(106279380bytes) bitmap.

【错误日志】:

Canvas: trying to draw too large(106279380bytes) bitmap.
android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:260)
android.graphics.Canvas.drawBitmap(Canvas.java:1415)
android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:545)
android.graphics.drawable.TransitionDrawable.draw(TransitionDrawable.java:217)
android.widget.ImageView.onDraw(ImageView.java:1268)

【Crash场景】:要显示的图片太大。

【解决办法】:压缩图片之后再显示。

Native Crash

常见信号量及其错误码

图片来源:Android 平台 Native 代码的崩溃捕获机制及实现

常见信号量

常见信号量错误码

添加新评论