工作區中添加超級備份手機不斷重啟的分析報告
【華為反饋】 【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地址:
閱讀(700) | 評論(0) | 轉發(0) |