3、应用设置之界面标注

来源:互联网 发布:千兆以太网测试软件 编辑:程序博客网 时间:2024/05/21 10:40

转载请注明出处:http://blog.csdn.net/droyon/article/details/39891355

一、全部、正在运行、已停用、USB存储设备、已下载TAB页界面元素标注。


1、图标。

boolean ensureIconLocked(Context context, PackageManager pm) {            if (this.icon == null) {                if (this.apkFile.exists()) {                    this.icon = this.info.loadIcon(pm);                    return true;                } else {                    this.mounted = false;                    this.icon = context.getResources().getDrawable(                            com.android.internal.R.drawable.sym_app_on_sd_unavailable_icon);                }            } else if (!this.mounted) {                // If the app wasn't mounted but is now mounted, reload                // its icon.                if (this.apkFile.exists()) {                    this.mounted = true;                    this.icon = this.info.loadIcon(pm);                    return true;                }            }            return false;        }    }

2、应用名称。

void ensureLabel(Context context) {            if (this.label == null || !this.mounted) {                if (!this.apkFile.exists()) {                    this.mounted = false;                    this.label = info.packageName;                } else {                    this.mounted = true;                    CharSequence label = info.loadLabel(context.getPackageManager());                    this.label = label != null ? label.toString() : info.packageName;                }            }        }

3、大小。

ApplicationsState.AppFilter filterObj;            Comparator<AppEntry> comparatorObj;            private int mWhichSize = SIZE_TOTAL;            boolean emulated = Environment.isExternalStorageEmulated();            if (emulated) {                mWhichSize = SIZE_TOTAL;            } else {                mWhichSize = SIZE_INTERNAL;            }            switch (mFilterMode) {                case FILTER_APPS_THIRD_PARTY:                    filterObj = ApplicationsState.THIRD_PARTY_FILTER;                    break;                case FILTER_APPS_SDCARD:                    filterObj = ApplicationsState.ON_SD_CARD_FILTER;                    if (!emulated) {                        mWhichSize = SIZE_EXTERNAL;                    }                    break;                case FILTER_APPS_DISABLED:                    filterObj = ApplicationsState.DISABLED_FILTER;                    break;                default:                    filterObj = ApplicationsState.ALL_ENABLED_FILTER;                    break;            }

void updateSizeText(CharSequence invalidSizeStr, int whichSize) {        if (ManageApplications.DEBUG) Log.i(ManageApplications.TAG, "updateSizeText of " + entry.label + " " + entry                + ": " + entry.sizeStr);        if (entry.sizeStr != null) {            switch (whichSize) {                case ManageApplications.SIZE_INTERNAL:                    appSize.setText(entry.internalSizeStr);                    break;                case ManageApplications.SIZE_EXTERNAL:                    appSize.setText(entry.externalSizeStr);                    break;                default:                    appSize.setText(entry.sizeStr);                    break;            }        } else if (entry.size == ApplicationsState.SIZE_INVALID) {            appSize.setText(invalidSizeStr);        }    }

不同的TAB页,按照是否含有模拟存储区,大小的计算方式不同。

大小的详细计算方式,请参考应用设置之属性、名词等解析。

4、5、空间。

此处的空间为应用所占的空间,属于机身存储设备区。计算方式:

try {                        final long[] stats = mContainerService.getFileSystemStats(                                Environment.getExternalStorageDirectory().getPath());                        mTotalStorage = stats[0];                        mFreeStorage = stats[1];                    } catch (RemoteException e) {                        Log.w(TAG, "Problem in container service", e);                    }

二、正在运行界面元素标注。


1、图标。

public Drawable loadIcon(Context context, RunningState state) {            if (mPackageInfo != null) {                return mPackageInfo.loadIcon(state.mPm);            }            return null;        }

2、名称。

void ensureLabel(PackageManager pm) {            if (mLabel != null) {                return;            }                        try {                ApplicationInfo ai = pm.getApplicationInfo(mProcessName,                        PackageManager.GET_UNINSTALLED_PACKAGES);                if (ai.uid == mUid) {                    mDisplayLabel = ai.loadLabel(pm);                    mLabel = mDisplayLabel.toString();                    mPackageInfo = ai;                    return;                }            } catch (PackageManager.NameNotFoundException e) {            }                        // If we couldn't get information about the overall            // process, try to find something about the uid.            String[] pkgs = pm.getPackagesForUid(mUid);                        // If there is one package with this uid, that is what we want.            if (pkgs.length == 1) {                try {                    ApplicationInfo ai = pm.getApplicationInfo(pkgs[0],                            PackageManager.GET_UNINSTALLED_PACKAGES);                    mDisplayLabel = ai.loadLabel(pm);                    mLabel = mDisplayLabel.toString();                    mPackageInfo = ai;                    return;                } catch (PackageManager.NameNotFoundException e) {                }            }                        // If there are multiple, see if one gives us the official name            // for this uid.            for (String name : pkgs) {                try {                    PackageInfo pi = pm.getPackageInfo(name, 0);                    if (pi.sharedUserLabel != 0) {                        CharSequence nm = pm.getText(name,                                pi.sharedUserLabel, pi.applicationInfo);                        if (nm != null) {                            mDisplayLabel = nm;                            mLabel = nm.toString();                            mPackageInfo = pi.applicationInfo;                            return;                        }                    }                } catch (PackageManager.NameNotFoundException e) {                }            }                        // If still don't have anything to display, just use the            // service info.            if (mServices.size() > 0) {                ApplicationInfo ai = mServices.values().iterator().next()                        .mServiceInfo.applicationInfo;                mPackageInfo = ai;                mDisplayLabel = mPackageInfo.loadLabel(pm);                mLabel = mDisplayLabel.toString();                return;            }                        // Finally... whatever, just pick the first package's name.            try {                ApplicationInfo ai = pm.getApplicationInfo(pkgs[0],                        PackageManager.GET_UNINSTALLED_PACKAGES);                mDisplayLabel = ai.loadLabel(pm);                mLabel = mDisplayLabel.toString();                mPackageInfo = ai;                return;            } catch (PackageManager.NameNotFoundException e) {            }        }

3、含有的服务以及进城详情。

mergedItem = new MergedItem(pi.mUserId);                    for (ServiceItem si : pi.mServices.values()) {//构建内部mServices,mProcesInfo。                        mergedItem.mServices.add(si);                        si.mMergedItem = mergedItem;                    }                    mergedItem.mProcess = pi;                    mergedItem.mOtherProcesses.clear();                    for (int mpi=firstProc; mpi<(mProcessItems.size()-1); mpi++) {                        mergedItem.mOtherProcesses.add(mProcessItems.get(mpi));                    }

setDescription(context, (mProcess.mPid > 0 ? 1 : 0) + mOtherProcesses.size(),                            mServices.size());

4、大小。

ong[] pss = ActivityManagerNative.getDefault()                    .getProcessPss(pids);boolean updateSize(Context context, long pss, int curSeq) {            mSize = pss * 1024;            if (mCurSeq == curSeq) {                String sizeStr = Formatter.formatShortFileSize(                        context, mSize);                if (!sizeStr.equals(mSizeStr)){                    mSizeStr = sizeStr;                    // We update this on the second tick where we update just                    // the text in the current items, so no need to say we                    // changed here.                    return false;                }            }            return false;        }

5、运行时间。

long activeSince = service.restarting == 0 ? service.activeSince : -1;服务activie的时间ai.mFirstRunTime = activeSince/*item.mActiveSince*/;DateUtils.formatElapsedTime(builder,                            (SystemClock.elapsedRealtime()-mFirstRunTime)/1000)

6、7、正在运行的空间计算。内存空间。

ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();mAm.getMemoryInfo(memInfo);SECONDARY_SERVER_MEM = memInfo.secondaryServerThreshold;MemInfoReader mMemInfoReader = new MemInfoReader();mMemInfoReader.readMemInfo();        long availMem = mMemInfoReader.getFreeSize() + mMemInfoReader.getCachedSize()                - SECONDARY_SERVER_MEM;float totalMem = mMemInfoReader.getTotalSize();            float totalShownMem = availMem + mLastBackgroundProcessMemory                    + mLastServiceProcessMemory;

0 0
原创粉丝点击