crash

出现crash,我们首先找到crash log(源于system log)

通过filter key——“类似AndroidRuntime: Process: com.android.settings”可以快速定位。

 

通常,crash的原因有很多,包括error/exception(属于uncheckd Throwable),如图:

Error

1.ArrayIndexOutOfBoundsException

06-30 14:42:44.584 26276 26276 E AndroidRuntime: FATAL EXCEPTION: main
06-30 14:42:44.584 26276 26276 E AndroidRuntime: Process: com.android.settings, PID: 26276
06-30 14:42:44.584 26276 26276 E AndroidRuntime: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
06-30 14:42:44.584 26276 26276 E AndroidRuntime: 	at android.util.ContainerHelpers.binarySearch(ContainerHelpers.java:28)
06-30 14:42:44.584 26276 26276 E AndroidRuntime: 	at android.util.ArraySet.indexOf(ArraySet.java:86)

可以直接追溯stack向下找到所研究的app里调用的位置。

 

2.OutOfMemoryError

05-25 07:40:47.946  9987  7816 E AndroidRuntime: java.lang.OutOfMemoryError: Failed to allocate a 48 byte allocation with 16 free bytes and 16B until OOM, max allowed footprint 268435456, growth limit 268435456
05-25 07:40:47.946  9987  7816 E AndroidRuntime: 	at com.android.internal.os.BatteryStatsImpl$Uid.readFromParcelLocked(BatteryStatsImpl.java:7540)
05-25 07:40:47.946  9987  7816 E AndroidRuntime: 	at com.android.internal.os.BatteryStatsImpl.readFromParcelLocked(BatteryStatsImpl.java:12834)
05-25 07:40:47.946  9987  7816 E AndroidRuntime: 	at com.android.internal.os.BatteryStatsImpl.readFromParcel(BatteryStatsImpl.java:12633)
05-25 07:40:47.946  9987  7816 E AndroidRuntime: 	at com.android.internal.os.BatteryStatsImpl.<init>(BatteryStatsImpl.java:8931)

OOM的问题不一定追溯stack就能找到原因(new对象过多导致的内存溢出/没有及时回收对象导致的内存泄露),所以通过filter key——"leak",我们找到真正内存开始泄露的地方(原因其实是没有及时unbind service)。

05-25 03:39:46.057 13289 13289 E ActivityThread: Activity com.android.settings.Settings$NetworkDashboardActivity has leaked ServiceConnection android.bluetooth.BluetoothPan$2@656fbcf that was originally bound here
05-25 03:39:46.057 13289 13289 E ActivityThread: android.app.ServiceConnectionLeaked: Activity com.android.settings.Settings$NetworkDashboardActivity has leaked ServiceConnection android.bluetooth.BluetoothPan$2@656fbcf that was originally bound here
05-25 03:39:46.057 13289 13289 E ActivityThread: 	at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:1532)
05-25 03:39:46.057 13289 13289 E ActivityThread: 	at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:1424)
05-25 03:39:46.057 13289 13289 E ActivityThread: 	at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1605)
05-25 03:39:46.057 13289 13289 E ActivityThread: 	at android.app.ContextImpl.bindServiceAsUser(ContextImpl.java:1565)
05-25 03:39:46.057 13289 13289 E ActivityThread: 	at android.content.ContextWrapper.bindServiceAsUser(ContextWrapper.java:691)
05-25 03:39:46.057 13289 13289 E ActivityThread: 	at android.bluetooth.BluetoothPan.doBind(BluetoothPan.java:148)
05-25 03:39:46.057 13289 13289 E ActivityThread: 	at android.bluetooth.BluetoothPan.<init>(BluetoothPan.java:141)
05-25 03:39:46.057 13289 13289 E ActivityThread: 	at android.bluetooth.BluetoothAdapter.getProfileProxy(BluetoothAdapter.java:2051)
05-25 03:39:46.057 13289 13289 E ActivityThread: 	at com.android.settings.network.TetherPreferenceController.onCreate(TetherPreferenceController.java:135)
05-25 03:39:46.057 13289 13289 E ActivityThread: 	at com.android.settingslib.core.lifecycle.Lifecycle.onCreate(Lifecycle.java:74)

 

 

References

Android P上Java Crash、Native Crash的异常处理流程学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值