zoukankan      html  css  js  c++  java
  • 2、应用设置之属性、名词等解析

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

    一、一级界面显示的条目数据大小,指的是哪里?

    是否存在模拟存储区 = 存储空间是否含有模拟存储区。


    假如(含有模拟存储区){
         大小 = Size_Total;
    }否则{
        大小 = Size_Internal;
    }

    假设应用程序存在于SD卡中,则:大小 = Size_External;

    二、名词解释。以及所代表的存储空间。

    public class PackageStats{
        /** Size of the code (e.g., APK) */
        public long codeSize;//apk的大小

        /**
         * Size of the internal data size for the application. (e.g.,
         * /data/data/<app>)
         */
        public long dataSize;//内部数据。/data/data/<packageName>

        /** Size of cache used by the application. (e.g., /data/data/<app>/cache) */
        public long cacheSize;//内部数据。/data/data/<packageName>/cache

        /**
         * Size of the secure container on external storage holding the
         * application's code.
         */
        public long externalCodeSize;//外部代码大小。比例如以下载的插件、资源等。

    以及移动到sd中的应用

        /**
         * Size of the external data used by the application (e.g.,
         * <sdcard>/Android/data/<app>)
         */
        public long externalDataSize;//外部数据大小。<sdcard>/Android/data/<packageName>

        /**
         * Size of the external cache used by the application (i.e., on the SD
         * card). If this is a subdirectory of the data directory, this size will be
         * subtracted out of the external data size.
         */
        public long externalCacheSize;//外部缓冲数据大小。假设此文件夹是externalDataSize的子文件夹,则此大小包括在externalDataSize中。



        /** Size of the external media size used by the application. */
        public long externalMediaSize;//外部媒体大小。



        /** Size of the package's OBBs placed on external media. */
        public long externalObbSize;//外部Obb大小。


    三、 大小的计算方式。

    内部数据大小 =  codeSize + dataSize。

    外部数据大小 =  externalCodeSize + externalDataSize +externalCachaSize + externalMediaSize + externalObbSize。
    应用大小(默认计算方式) = externalCodeSize + externalDataSize + codeSize + dataSize。

    四、正在执行的服务排序方式。

    參考资料:http://blog.csdn.net/jk2255cl/article/details/11682429
    4、1:正在 执行的服务排序。
    class ServiceProcessComparator implements Comparator<ProcessItem> {
            public int compare(ProcessItem object1, ProcessItem object2) {
                if (object1.mUserId != object2.mUserId) {//用户ID
                    if (object1.mUserId == mMyUserId) return -1;
                    if (object2.mUserId == mMyUserId) return 1;
                    return object1.mUserId < object2.mUserId ?

    -1 : 1;
                }
                if (object1.mIsStarted != object2.mIsStarted) {//线程是否启动
                    // Non-started processes go last.
                    return object1.mIsStarted ? -1 : 1;
                }
                if (object1.mIsSystem != object2.mIsSystem) {//是否为系统进程
                    // System processes go below non-system.
                    return object1.mIsSystem ? 1 : -1;
                }
                if (object1.mActiveSince != object2.mActiveSince) {//服务activie的时间
                    // Remaining ones are sorted with the longest running
                    // services last.
                    return (object1.mActiveSince > object2.mActiveSince) ? -1 : 1;
                }
                return 0;
            }
        }


    4.2:显示后台线程后排序
    final Comparator<RunningState.MergedItem> mBackgroundComparator
            = new Comparator<RunningState.MergedItem>() {
                @Override
                public int compare(MergedItem lhs, MergedItem rhs) {
                    if (lhs.mUserId != rhs.mUserId) {//用户ID
                        if (lhs.mUserId == mMyUserId) return -1;
                        if (rhs.mUserId == mMyUserId) return 1;
                        return lhs.mUserId < rhs.mUserId ? -1 : 1;
                    }
                    if (lhs.mProcess == rhs.mProcess) {//假设同一个进程的 进程和服务,依照label进行排序
                        if (lhs.mLabel == rhs.mLabel) {
                            return 0;
                        }
                        return lhs.mLabel != null ? lhs.mLabel.compareTo(rhs.mLabel) : -1;
                    }
                    if (lhs.mProcess == null) return -1;//进程是否为null
                    if (rhs.mProcess == null) return 1;
                    if (DEBUG_COMPARE) Log.i(TAG, "    Label " + lhs.mProcess.mLabel
                            + " with " + rhs.mProcess.mLabel);
                    final ActivityManager.RunningAppProcessInfo lhsInfo
                            = lhs.mProcess.mRunningProcessInfo;
                    final ActivityManager.RunningAppProcessInfo rhsInfo
                            = rhs.mProcess.mRunningProcessInfo;
                    final boolean lhsBg = lhsInfo.importance
                            >= ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND;
                    final boolean rhsBg = rhsInfo.importance
                            >= ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND;
                            if (DEBUG_COMPARE) Log.i(TAG, "       Bg " + lhsBg + " with " + rhsBg);
                    if (lhsBg != rhsBg) {
                        return lhsBg ? 1 : -1;//是否为后台线程
                    }
                    final boolean lhsA = (lhsInfo.flags
                            & ActivityManager.RunningAppProcessInfo.FLAG_HAS_ACTIVITIES) != 0;
                    final boolean rhsA = (rhsInfo.flags
                            & ActivityManager.RunningAppProcessInfo.FLAG_HAS_ACTIVITIES) != 0;
                    if (DEBUG_COMPARE) Log.i(TAG, "      Act " + lhsA + " with " + rhsA);
                    if (lhsA != rhsA) {//是否关联到系统进程
                        return lhsA ?

    -1 : 1;
                    }
                    if (DEBUG_COMPARE) Log.i(TAG, "      Lru " + lhsInfo.lru + " with " + rhsInfo.lru);
                    if (lhsInfo.lru != rhsInfo.lru) {//意味着是否最近频繁使用
                        return lhsInfo.lru < rhsInfo.lru ?

    -1 : 1;
                    }
                    if (lhs.mProcess.mLabel == rhs.mProcess.mLabel) {
                        return 0;
                    }
                    if (lhs.mProcess.mLabel == null) return 1;//名称字母
                    if (rhs.mProcess.mLabel == null) return -1;
                    return lhs.mProcess.mLabel.compareTo(rhs.mProcess.mLabel);
                }
        };

    五、所有应用程序排序方式

    依照大小、名称排序。

    mWhickSize取值參考一。等同于一中的大小。


    依照名称进行排序:
    public static final Comparator<AppEntry> ALPHA_COMPARATOR = new Comparator<AppEntry>() {
            private final Collator sCollator = Collator.getInstance();
            @Override
            public int compare(AppEntry object1, AppEntry object2) {
                final boolean normal1 = object1.info.enabled
                        && (object1.info.flags&ApplicationInfo.FLAG_INSTALLED) != 0;
                final boolean normal2 = object2.info.enabled
                        && (object2.info.flags&ApplicationInfo.FLAG_INSTALLED) != 0;
                if (normal1 != normal2) {
                    return normal1 ? -1 : 1;
                }
                return sCollator.compare(object1.label, object2.label);
            }
        };
    依照大小排序,依照存在位置,排序方式不同。规则例如以下:
                             switch (mWhichSize) {
                            case SIZE_INTERNAL:
                                comparatorObj = ApplicationsState.INTERNAL_SIZE_COMPARATOR;
                                break;
                            case SIZE_EXTERNAL:
                                comparatorObj = ApplicationsState.EXTERNAL_SIZE_COMPARATOR;
                                break;
                            default:
                                comparatorObj = ApplicationsState.SIZE_COMPARATOR;
                                break;
                        }

    默认排序方式
    public static final Comparator<AppEntry> SIZE_COMPARATOR
                = new Comparator<AppEntry>() {
            private final Collator sCollator = Collator.getInstance();
            @Override
            public int compare(AppEntry object1, AppEntry object2) {
                if (object1.size < object2.size) return 1;
                if (object1.size > object2.size) return -1;
                return sCollator.compare(object1.label, object2.label);
            }
        };
    不含有模拟存储区
        public static final Comparator<AppEntry> INTERNAL_SIZE_COMPARATOR
                = new Comparator<AppEntry>() {
            private final Collator sCollator = Collator.getInstance();
            @Override
            public int compare(AppEntry object1, AppEntry object2) {
                if (object1.internalSize < object2.internalSize) return 1;
                if (object1.internalSize > object2.internalSize) return -1;
                return sCollator.compare(object1.label, object2.label);
            }
        };
    sd卡存储区排序方式
        public static final Comparator<AppEntry> EXTERNAL_SIZE_COMPARATOR
                = new Comparator<AppEntry>() {
            private final Collator sCollator = Collator.getInstance();
            @Override
            public int compare(AppEntry object1, AppEntry object2) {
                if (object1.externalSize < object2.externalSize) return 1;
                if (object1.externalSize > object2.externalSize) return -1;
                return sCollator.compare(object1.label, object2.label);
            }
        };


  • 相关阅读:
    什么是webview
    juqery.fn.extend和jquery.extend
    LeetCode
    5. Longest Palindromic Substring
    42. Trapping Rain Water
    11. Container With Most Water
    621. Task Scheduler
    49. Group Anagrams
    739. Daily Temperatures
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6770615.html
Copyright © 2011-2022 走看看