工作区中添加超级备份手机不断重启的分析报告
【华为反馈】 【TIT-AL00C328B120_AFW_必现】创建工作空间后升级系统,升级失败,手机循环重启。
通过分析log发现,实际上这个问题与OTA无关,而与工作区应用发出的notification有关。
经过沟通和自测,复现了此问题。
步骤如下:
1、插入sim卡【sim卡中有2个联系人,手机中无】创建afw工作区;【测试前手机
已恢复出厂设置】
2、adb install 超级备份应用
3、将个人区超级备份应用卸载
4、移除sim卡,重启手机;重启后,手机正常,没有发生不断重启现象;
5、关机插入sim卡开机,通过testDPC隐藏超级备份,再显示超级备份,重启手
机,等待约一分钟后,手机不断重启。
超级备份应用在开机一段时间之后,会给用户一个通知,提示用户进行备份。
在发送通知的过程中,EMUI的接口会访问个人区的超级备份,由于在步骤3中已经把超级备份卸载,系统会抛出一个异常,导致notificationservice崩溃,最终android重启, 重启之后又重复之前的过程,所有循环重启。
不单超级备份有此问题,只要是会发送notificaion的应用,按照此操作步骤,应该都有问题。
对比机P8 lite也存在此问题。
Log分析:
1.
02-26 16:05:04.936 V/NotificationManager( 5557): com.idea.backup.smscontacts: notify(2131165254, Notification(pri=0 contentView=com.idea.backup.smscontacts/0x10900f9 vibrate=null sound=null defaults=0x0 flags=0x10 color=0x00000000 vis=PRIVATE))
超级备份(com.idea.backup.smscontacts)向用户发送了一个通知。
2.
02-26 16:05:04.941 D/AndroidRuntime( 903): Shutting down VM
02-26 16:05:04.942 E/AndroidRuntime( 903): *** FATAL EXCEPTION IN SYSTEM PROCESS: main
02-26 16:05:04.942 E/AndroidRuntime( 903): java.lang.IllegalArgumentException: No such package com.idea.backup.smscontacts
02-26 16:05:04.942 E/AndroidRuntime( 903): at android.widget.RemoteViews.getApplicationInfo(RemoteViews.java:2776)
02-26 16:05:04.942 E/AndroidRuntime( 903): at android.widget.RemoteViews.(RemoteViews.java:1655)
02-26 16:05:04.942 E/AndroidRuntime( 903): at com.android.server.notification.HwNotificationManagerService.generateConver(HwNotificationManagerService.java:446)
02-26 16:05:04.942 E/AndroidRuntime( 903): at com.android.server.notification.HwNotificationManagerService.coverNotificationContentView(HwNotificationManagerService.java:502)
02-26 16:05:04.942 E/AndroidRuntime( 903): at com.android.server.notification.HwNotificationManagerService.hwEnqueueNotificationWithTag(HwNotificationManagerService.java:609)
02-26 16:05:04.942 E/AndroidRuntime( 903): at com.android.server.notification.NotificationManagerService$8.run(NotificationManagerService.java:2103)
在发送通知的过程中,在hwEnqueueNotificationWithTag(pkg, callingUid, r)函数中发生了crash。 Crash的原因是没有找到包(com.idea.backup.smscontacts),
3.
通过PM命令查看手机中安装的包,在工作空间中可以查找到超级备份(com.idea.backup.smscontacts),包是存在的。
4.
查看remoteViews.java的代码可以看到remoteview是根据userID来获取应用信息的, 代码如下:
Context context = application.getBaseContext().createPackageContextAsUser(packageName, 0, new UserHandle(userId));
而emui的接口(hwEnqueueNotificationWithTag),并没有userID这个参数,所以我们怀疑是hwEnqueueNotificationWithTag这个接口不兼容AFW的导致
改善对策:
捕获emui接口抛出的异常:
try {
hwEnqueueNotificationWithTag(pkg, callingUid, r);
} catch (IllegalArgumentException e) {
// expected
Log.e(TAG, "hwEnqueueNotificationWithTag failed" + e);
}
hwEnqueueNotificationWithTag是EMUI加入的接口,捕获其抛出的异常不会影响android正常的通知功能,可能会对EMUI相关功能的产生影响,这需要EMUI的同事后续修改。
自测结果: 手机不会发生重启,通知可以正常提示。
Log地址:
阅读(1163) | 评论(0) | 转发(0) |