天天看點

android 分析so崩潰,android的/system/lib/libhwui.so崩潰分析和解決辦法

直接上崩潰日志了:

#00 pc 00039518 (null)

#01 pc 00022ef9 /system/lib/libhwui.so [armeabi-v7a]

#02 pc 00015d7d /system/lib/libhwui.so [armeabi-v7a]

#03 pc 00014517 /system/lib/libhwui.so [armeabi-v7a]

#04 pc 0001440b /system/lib/libhwui.so [armeabi-v7a]

#05 pc 0001d133 /system/lib/libhwui.so [armeabi-v7a]

#06 pc 000679c5 /system/lib/libandroid_runtime.so [armeabi-v7a]

#07 pc 0002054c /system/lib/libdvm.so (dvmPlatformInvoke +112) [armeabi-v7a]

#08 pc 0005132f /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*) +398) [armeabi-v7a]

#09 pc 000299e0 /system/lib/libdvm.so [armeabi-v7a]

#10 pc 00030f48 /system/lib/libdvm.so (dvmMterpStd(Thread*) +76) [armeabi-v7a]

#11 pc 0002e5e0 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*) +184) [armeabi-v7a]

#12 pc 00063af9 /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool) +392) [armeabi-v7a]

#13 pc 0006ba1f /system/lib/libdvm.so [armeabi-v7a]

#14 pc 000299e0 /system/lib/libdvm.so [armeabi-v7a]

#15 pc 00030f48 /system/lib/libdvm.so (dvmMterpStd(Thread*) +76) [armeabi-v7a]

#16 pc 0002e5e0 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*) +184) [armeabi-v7a]

#17 pc 00063815 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list) +336) [armeabi-v7a]

#18 pc 0004cf17 /system/lib/libdvm.so [armeabi-v7a]

#19 pc 0004dfcf /system/lib/libandroid_runtime.so [armeabi-v7a]

#20 pc 0004ed27 /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*) +354) [armeabi-v7a]

#21 pc 0000109b /system/bin/app_process

#22 pc 0000e563 /system/lib/libc.so (__libc_init +50) [armeabi-v7a]

#23 pc 00000db0 /system/bin/app_process

java:

android.view.GLES20Canvas.nDrawDisplayList(Native Method)

android.view.GLES20Canvas.drawDisplayList(GLES20Canvas.java:420)

android.view.HardwareRenderer$GlRenderer.drawDisplayList(HardwareRenderer.java:1646)

android.view.HardwareRen

這種崩潰大部分都集中在android4.4系統的手機上,在一個動畫播放完畢之後的onAnimationEnd (Animation animation)回調中處理一些事務造成的

原始代碼:

final View animView = findViewById(R.id.anim_view);

Animation animation = AnimationUtils.loadAnimation(mActivity, R.anim.close_view);

animation.setAnimationListener(new Animation.AnimationListener() {

@Override

public void onAnimationStart(Animation animation) {

}

@Override

public void onAnimationEnd(Animation animation) {

animView.setVisibility(View.INVISIBLE);

animView.post(new Runnable() {

@Override

public void run() {

finish();

}

});

}

@Override

public void onAnimationRepeat(Animation animation) {

}

});

animView.startAnimation(animation);

修改後的onAnimationEnd方法:

public void onAnimationEnd(Animation animation) {

finish();

}