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);

}

};

时间: 2024-11-07 11:48:07

2、应用设置之属性、名词等解析的相关文章

创建在类路径资源[applicationcontext]中定义名为“工厂”的bean时出错。:在设置bean属性“dataSource”时,无法解析对bean“dataSource”的引用;嵌套异常是org.springframe .beans.factory。BeanCreationException:创建名为“数据源”的bean时出错,该名称是在类路径资源[applicationcontext

控制台报错: 创建在类路径资源[applicationcontext]中定义名为"工厂"的bean时出错.:在设置bean属性"dataSource"时,无法解析对bean"dataSource"的引用;嵌套异常是org.springframe .beans.factory.BeanCreationException:创建名为"数据源"的bean时出错,该名称是在类路径资源[applicationcontext]中定义的.:设

Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/44171115 大家好,欢迎继续回到Android属性动画完全解析.在上一篇文章当中我们学习了属性动画的一些进阶技巧,包括ValueAnimator和ObjectAnimator的高级用法,那么除了这些之外,当然还有一些其它的高级技巧在等着我们学习,因此本篇文章就对整个属性动画完全解析系列收个尾,来学习一下剩下的非常重要的高级技巧. 另外,本篇文章中使用的代码是建立在上篇文章基础之

Android属性动画完全解析(上)

Android属性动画完全解析(上) 转载:http://blog.csdn.net/guolin_blog/article/details/43536355 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(frame-by-frame animation)和补间动画(tweened animation).逐帧动画的工作原理很简单,其实就是将一个完整的动画拆分成一张张单独的图片,然后再将它们连贯起来进行播放,类似

iOS对UIViewController生命周期和属性方法的解析

目录[-] iOS对UIViewController生命周期和属性方法的解析 一.引言 二.UIViewController的生命周期 三.从storyBoard加载UIViewController实例的传值陷阱 四.UIViewController与StroyBoard的相关相互方法 1.ViewController直接在StoryBoard中进行跳转的传值 2.使用代码跳转Storyboard中的controller 五.UIViewController之间的一些从属关系 1.parentV

(转)Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法

目录(?)[-] Interpolator的用法 ViewPropertyAnimator的用法 转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/44171115 大家好,欢迎继续回到Android属性动画完全解析.在上一篇文章当中我们学习了属性动画的一些进阶技巧,包括ValueAnimator和ObjectAnimator的高级用法,那么除了这些之外,当然还有一些其它的高级技巧在等着我们学习,因此本篇文章就对整个属性动画完全解析

【iOS开发】iOS对UIViewController生命周期和属性方法的解析

iOS对UIViewController生命周期和属性方法的解析 一.引言 作为MVC设计模式中的C,Controller一直扮演着项目开发中最重要的角色,它是视图和数据的桥梁,通过它的管理,将数据有条有理的展示在我们的View层上.iOS中的UIViewController是UIKit框架中最基本的一个类.从第一个UI视图到复杂完整项目,都离不开UIViewController作为基础.基于UIViewController的封装和扩展,也能够出色的完成各种复杂界面逻辑.这篇博客,旨在讨论UIV

Android属性动画完全解析(中)

转载:http://blog.csdn.net/guolin_blog/article/details/43536355 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画进行了很大幅度的改进,之前补间动画可以做到的属性动画也能做到,补间动画做不到的现在属性动画也可以做到了.因此,今天我们就来学习一下属性动画的高级用法,看看如何实现一些补间动画所无法实现

Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43536355 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画进行了很大幅度的改进,之前补间动画可以做到的属性动画也能做到,补间动画做不到的现在属性动画也可以做到了.因此,今天我们就来学习一下属性动画的高级用法,看看如何实现一些补间动画

如何用textview设置drawableLeft属性

在麦子学院的论坛里,我看见很多android新手都在问textview设置drawableleft属性的方法,我把那位在麦子学院论坛里的问题复制下来了,然后我们一起来解答下:  原问题描述:  xml中的textView:  1. <font face="宋体" size="3"> <TextView  2. android:id="@+id/bookTitle"  3. android:layout_width="m

cookie 设置 httpOnly属性

cookie 设置 httpOnly属性防止js读取cookie. 建立filter拦截器类 CookieHttpOnlyFilter import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.serv