您的位置:首页 > 移动开发 > Android开发

android基础学习之PackageManager和activityManager的用法

2015-02-09 14:31 417 查看
Android系统为应用管理功能提供了大量的API。根据功能的不同,这些API分为两大类:PackageManager相关和ActivitManager相关。

PackageManager相关

本类API是对所有基于加载信息的数据结构的封装,包括以下功能:

安装,卸载应用

查询permission相关信息

查询Application相关信息(application,activity,receiver,service,provider及相应属性等)

查询已安装应用

增加,删除permission

清除用户数据、缓存,代码段等

非查询相关的API需要特定的权限,具体的API请参考SDK文档。

ActivityManager相关

本类API是对运行时管理功能和运行时数据结构的封装,包括以下功能

激活/去激活activity

注册/取消注册动态接受intent

发送/取消发送intent

activity生命周期管理(暂停,恢复,停止,销毁等)

activity task管理(前台->后台,后台->前台,最近task查询,运行时task查询)

激活/去激活service

激活/去激活provider等

task管理相关API需要特定的权限,具体API可参考SDK文档。

PackageManger 类

说明: 获得已安装的应用程序信息 。可以通过getPackageManager()方法获得。

常用方法:

public abstract PackageManager getPackageManager()

功能:获得一个PackageManger对象

public abstrac tDrawable getApplicationIcon(String packageName)

参数: packageName 包名

功能:返回给定包名的图标,否则返回null

public abstract ApplicationInfo getApplicationInfo(String packageName, int flags)

参数:packagename 包名

flags 该ApplicationInfo是此flags标记,通常可以直接赋予常数0即可

功能:返回该ApplicationInfo对象

public abstract List<ApplicationInfo> getInstalledApplications(int flags)

参数:flag为一般为GET_UNINSTALLED_PACKAGES,那么此时会返回所有ApplicationInfo。我们可以对ApplicationInfo的flags过滤,得到我们需要的。

功能:返回给定条件的所有PackageInfo

public abstract List<PackageInfo> getInstalledPackages(int flags)

参数如上

功能:返回给定条件的所有PackageInfo

public abstractResolveInfo resolveActivity(Intent intent, int flags)

参数: intent 查寻条件,Activity所配置的action和category

flags: MATCH_DEFAULT_ONLY:Category必须带有CATEGORY_DEFAULT的Activity,才匹配

GET_INTENT_FILTERS :匹配Intent条件即可

GET_RESOLVED_FILTER :匹配Intent条件即可

功能 :返回给定条件的ResolveInfo对象(本质上是Activity)

public abstract List<ResolveInfo> queryIntentActivities(Intent intent, int flags)

参数同上

功能 :返回给定条件的所有ResolveInfo对象(本质上是Activity),集合对象

public abstract ResolveInfo resolveService(Intent intent, int flags)

参数同上

功能 :返回给定条件的ResolveInfo对象(本质上是Service)

public abstract List<ResolveInfo> queryIntentServices(Intent intent, int flags)

参数同上

功能 :返回给定条件的所有ResolveInfo对象(本质上是Service),集合对象

在网上收集了一些资料觉得挺不错的,给PackageManager类做一个补充

PackageItemInfo类

说明:AndroidManifest.xml文件中所有节点的基类,提供了这些节点的基本信息:a label、icon、 meta-data。它并不直接使用,而是由子类继承然后调用相应方法。

常用字段:

public int icon 获得该资源图片在R文件中的值 (对应于android:icon属性)

public int labelRes 获得该label在R文件中的值(对应于android:label属性)

public String name 获得该节点的name值 (对应于android:name属性)

public String packagename 获得该应用程序的包名 (对应于android:packagename属性)

常用方法:

Drawable loadIcon(PackageManager pm) 获得当前应用程序的图像

CharSequence loadLabel(PackageManager pm) 获得当前应用程序的label

ActivityInfo类 继承自 PackageItemInfo

说明: 获得应用程序中<activity/>或者 <receiver />节点的信息 。我们可以通过它来获取我们设置的任何属性,包括theme 、launchMode、launchmode等中的loadIcon()和loadLabel()

ServiceInfo 类

说明: 同ActivityInfo类似 ,同样继承自 PackageItemInfo,只不过它表示的是<service>节点信息。

ApplicationInfo类 继承自 PackageItemInfo

说明:获取一个特定引用程序中<application>节点的信息。

字段说明:

    flags字段: FLAG_SYSTEM  系统应用程序

     FLAG_EXTERNAL_STORAGE 表示该应用安装在sdcard中

常用方法:继承至PackageItemInfo类中的loadIcon()和loadLabel()

ResolveInfo类

说明:根据<intent>节点来获取其上一层目录的信息,通常是<activity>、<receiver>、<service>节点信息。

常用字段:

public ActivityInfo activityInfo 获取 ActivityInfo对象,即<activity>或<receiver >节点信息

public ServiceInfo serviceInfo 获取 ServiceInfo对象,即<activity>节点信息

常用方法:

Drawable loadIcon(PackageManager pm) 获得当前应用程序的图像

CharSequence loadLabel(PackageManager pm) 获得当前应用程序的label

PackageInfo类

说明:手动获取AndroidManifest.xml文件的信息 。

常用字段:

public String packageName 包名

public ActivityInfo[] activities 所有<activity>节点信息

public ApplicationInfo applicationInfo <application>节点信息,只有一个

public ActivityInfo[] receivers 所有<receiver>节点信息,多个

public ServiceInfo[] services 所有<service>节点信息 ,多个

ActivityManager 类:

获取方法ActivityManager mActivityManager (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

常用的静态内部类如下(下面具体介绍):

ActivityManager.MemoryInfo: 系统可用内存信息

ActivityManager.RecentTaskInfo: 最近的任务信息

ActivityManager.RunningAppProcessInfo: 正在运行的进程信息

ActivityManager.RunningServiceInfo: 正在运行的服务信息

ActivityManager.RunningTaskInfo: 正在运行的任务信息

常用方法:

public void getMemoryInfo(ActivityManager.MemoryInfo outInfo)

说明:获取系统可用内存信息,数据封装在outInfo对象上

public Debug.MemoryInfo getProcessMemoryInfo(int[ ] pids

说明:获取每个进程ID(集合)占用的内存大小(集合), pid和MemoryInfo是一一对应的。

参数:pids 进程ID的集合

PS :我们可以通过调用Debug.MemoryInfo 的dalvikPrivateDirty字段获取进程占用的内存大小(单位为KB)

public List<ActivityManager.RunningAppProcessInfo>getRunningAppProcess()

说明: 获取系统里正在运行的进程

public List<ActivityManager.RunningServiceInfo>getRunningServices(int maxNum)

说明: 获取系统里所有正在运行的服务

参数:可能服务的最大值(赋予一常数即可,20、50都OK)

public List<ActivityManager.RunningTaskInfoo>getRunningTasks(int maxNum)

说明:获取系统里正在运行的服务

参数: 同上

public List<ActivityManager.RecentTaskInfo>getRecentTasks(int maxNum, int flags)

说明:获取系统里最近启动的任务

参数: 同上,flags一般为0即可

public voidkillBackgroundProcess(String packageName)

说明:立即杀掉给定包名的进程,释放进程占用的资源(内存等),如果需要,系统会再次重新启动该进程。系统

PS:系统进程是杀不死的,只能杀死用户进程。但我没有找到好的方法辨别系统进程还是用户进程。但可以肯定的是,

能够杀死的一定是用户进程。

public void restartPackage(String packageName)

说明:该方法已弃用,等同于killBackgroundProcess 。

ActivityManager.MemoryInfo类

常用字段:

long availMem 系统可用内存

long threshold系统内存不足的阀值,即临界值

boolean lowMemory 如果当前可用内存<=threshold,该值为真

ActivityManager.RunningAppProcessInfo类

常用字段:

int pid 进程ID

int uid 进程所在的用户ID

String processName 进程名,默认是包名或者由android:process=””属性指定

String [ ] pkgList 运行在该进程下的所有应用程序包名

对ActivityManager.RecentTaskInfo 、ActivityManager.RunningServiceInfo 、ActivityManager.RunningTaskInfo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: