RecentApps圖標異常分析

  • 問題描述
    打開圖庫,點擊“發送 ”按鈕,選擇上傳到蘇寧雲,分享後點擊“最近應用 ”按鈕,發現雲盤圖標異常。
    這裏寫圖片描述

  • 問題分析
    模塊: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.
(小機器人來啦!)
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章