問題描述
打開圖庫,點擊“發送 ”按鈕,選擇上傳到蘇寧雲,分享後點擊“最近應用 ”按鈕,發現雲盤圖標異常。
問題分析
模塊:SystemUI
源碼位置:
frameworks/base/packages/SystemUI/src/com/android/systemui/recent/icon加載過程(RecentTaskLoader.java)
從Task信息中獲取圖標
final ResolveInfo resolveInfo = pm.resolveActivity(recentInfo.baseIntent, 0);
private Drawable getFullResIcon(ResolveInfo info, PackageManager packageManager) {
Resources resources;
try {
resources = packageManager.getResourcesForApplication(
info.activityInfo.applicationInfo);
} catch (PackageManager.NameNotFoundException e) {
resources = null;
}
if (resources != null) {
int iconId = info.activityInfo.getIconResource();
if (iconId != 0) {
return getFullResIcon(resources, iconId);
}
}
return getFullResDefaultActivityIcon();
}
- ActivityInfo
public final int getIconResource() {
return icon != 0 ? icon : applicationInfo.icon;
}
若activity設置了icon返回activity的icon,否則返回application icon。
- 從系統資源中獲取默認圖標
Drawable getFullResDefaultActivityIcon() {
return getFullResIcon(Resources.getSystem(),
com.android.internal.R.mipmap.sym_def_app_icon);
}
android.R.mipmap
常量
int sym_def_app_icon
Default icon for applications that don’t specify an icon.
(小機器人來啦!)
結論
Recent apps應用圖標顯示優先級爲:
(關於android 任務堆棧等更加深入的內容請移步“擴展閱讀”, 強烈推薦~~~)
擴展閱讀
Android源碼學習之六——ActivityManager框架解析
android ActivityManagerService 源碼分析—-Activity管理(一)